帮忙看看代码!

eul 2005-05-23 09:55:49
代码如下,在vc下是可以编译通过并能正确运行。可是如果换成g++编译,就会出错。
why?


---
#include <iostream>

using namespace std;

class A {
public:
A() { cout << "A::A()" << endl; }
A(A& a) { cout << "A::A(A& a)" << endl; } // 如果没这一句,则g++也可以编译通过
~A() {}

int i;
};

A fun()
{
return A();
}


int main(int argc, char** argv)
{
fun();

return 0;
}
...全文
88 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
eul 2005-05-23
  • 打赏
  • 举报
回复
TO: Beover1984(摇滚人生)

感觉这样改比较牵强,在没解决以前,我是这么干的。
Beover1984 2005-05-23
  • 打赏
  • 举报
回复
改成这样

A fun()
{
A a;
return a;
}
eul 2005-05-23
  • 打赏
  • 举报
回复
To: boxban(冻酸梨)
抱歉,刚结完帖看到了你的回帖。
不好意思!
boxban 2005-05-23
  • 打赏
  • 举报
回复
A(A& a) {...} 改成 A(const A& a) 就可以了
eul 2005-05-23
  • 打赏
  • 举报
回复
代码是没错的。至少vc是编译通过了,也执行正确。

如果把代码改成这样就OK了。
刚才试了一下,编译通过了。
谢谢各位!

---
#include <iostream>

using namespace std;

class A {
public:
A() { cout << "A::A()" << endl; }

// 下面的构造函数改了。加了个const关键字
A(const A& a) { cout << "A::A(A& a)" << endl; }
~A() {}

int i;
};

A fun()
{
return A();
}


int main(int argc, char** argv)
{
fun();

return 0;
}
CPPLOVER_78 2005-05-23
  • 打赏
  • 举报
回复
没有用过G++ 不知道.呵呵
foochow 2005-05-23
  • 打赏
  • 举报
回复
好像没错啊
xuzheng318 2005-05-23
  • 打赏
  • 举报
回复
是什么错误!?
yahaha 2005-05-23
  • 打赏
  • 举报
回复
没有什么问题吧!报什么错!
zsl6658 2005-05-23
  • 打赏
  • 举报
回复
我觉得你的fun()函数返回A,过程中调用了A的拷贝构造函数中出错了,你试一下这样写
A a=fun();我这边没编译器,不能试。如果不行,那我就不知道了!!

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧