为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
xiele 2016-11-27 08:00:17
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++中有没有类似的语法,应该怎么用?
查看完整描述

3 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

回答你最后一个问题:

可以在调用时嵌一个构造函数。这相当于在调用 pf 函数时,先临时构造一个 Coordinate(4, 9),将这个临时构造的作为 pf 的参数传入。 但你的写法有问题

你在参数列表中写的是 new Coordinate(4,9),这确实是构造了一个 Coordinate(4,9),但是在申请的一块内存中构造的,new 返回的是指向这个临时对象的指针(Coordinate*类型),而 pf 的参数要求是 Coordinate 类型,类型不匹配所以报错。

正确地写法其实很简单 pf(Coordinate(4,9));   直接写 Coordinate 的构造函数就相当于临时构造了一个。

查看完整回答
反对 回复 2016-11-27
  • xiele
    xiele
    明白了 谢谢。还是java惹的祸(>_<)
?
何方神圣

TA贡献11条经验 获得超58个赞

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

查看完整回答
反对 回复 2016-11-28
?
xiele

TA贡献6条经验 获得超6个赞

找到问题了

学java时留下的习惯

杯具了…………

查看完整回答
反对 回复 2016-11-27
  • onemoo
    onemoo
    其实这就是Java和C++的根本区别:Java只有“引用语义”,而C++有“值语义”和“引用语义”。 C++中直接使用类型等于是使用“值语义”,只有指针或引用类型才能表达“引用语义”。
  • 3 回答
  • 0 关注
  • 1670 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信