求查错,纠结了2个小时没看出来

Coordinate.h

#include <iostream>
using namespace std;

class Coordinate{
public:
	Coordinate(int x=0,int y=0){
		X=x;
		Y=y;
	}
	void pf(){
		cout<<X<<"  "<<Y<<endl;
	}
private:
	int X;
	int Y;
};

test.cpp

#include "Coordinate.h"

int main(){
	Coordinate c = new Coordinate(7,11);
	c.pf();
}

我做个模版练习时出的错,建test.cpp测试,也报错

invalid conversion from ‘Coordinate*’ to ‘int’ [-fpermissive]

Coordinate c = new Coordinate(7,11);

报错位置是test.cpp的第四行 

Coordinate c = new Coordinate(7,11);

我的构造函数应该没写错吧,为什么说“无效的Coordinate指针指向int”?

求大神指点迷津



----------------------------------------

找到问题了

学java时留下的习惯

杯具了……


顺带问一下

函数调用里能不能内嵌构造函数

比如:

void pf(Coordinate c){
    cout<<c.X<<" "<<c.Y<<endl;
}

调用时标准写法是

Coordinate c1(4,9);
pf(c1);

java中可以合成一句:pf(new Coordinate(4,9));

c++中用这种写法就报错。

请教下大神,c++中有没有类似的语法,应该怎么用?

xiele
浏览 1627回答 3
3回答

onemoo

回答你最后一个问题:可以在调用时嵌一个构造函数。这相当于在调用 pf 函数时,先临时构造一个 Coordinate(4, 9),将这个临时构造的作为 pf 的参数传入。 但你的写法有问题。你在参数列表中写的是 new Coordinate(4,9),这确实是构造了一个 Coordinate(4,9),但是在申请的一块内存中构造的,new 返回的是指向这个临时对象的指针(Coordinate*类型),而 pf 的参数要求是 Coordinate 类型,类型不匹配所以报错。正确地写法其实很简单 pf(Coordinate(4,9));   直接写 Coordinate 的构造函数就相当于临时构造了一个。

何方神圣

Coordinate c = new Coordinate(7,11);   照理说这样是可以的,但是你的类中构造函数Coordinate(int x=0,int y=0),又将参数赋值,可能有问题吧。只是看一眼,没在环境测试。

xiele

找到问题了学java时留下的习惯杯具了…………
打开App,查看更多内容
随时随地看视频慕课网APP