关于拷贝构造函数, 小人有一事不明

fat_how 2004-11-18 11:35:07
class A {
public:
A(const A& other);
A();

void foo() {}
};

A::A(const A& other) {
other.foo(); // <<-这里编译通不过.
}

A::A() {
}

int main() {
A a;
A b(a);
return 0;
}

gcc提示
ccont.cpp:12: passing `const A' as `this' argument of `void A::foo()' discards qualifiers
vc下也有类似的提示

谢谢
...全文
104 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolizi 2004-11-19
  • 打赏
  • 举报
回复

第三种方法:

A::A(const A& other)
{
const_cast<A&>(other).foo();
}
xunknown 2004-11-19
  • 打赏
  • 举报
回复
编译没有通过就该到通过为止啊。
楼上的几位兄弟都说得很对了。
学着做就行了。
zhangfjj 2004-11-19
  • 打赏
  • 举报
回复
因为传入的一个const &,即形参为一个常对象,(const在这里起到保护实参,防止在函数中被修改),只能调用const成员函数
zhangfjj 2004-11-19
  • 打赏
  • 举报
回复
1。去掉复制构造函数参数的const修改
2。把void foo()定义为常成员函数。
原来上面说得很清楚了。
我还以为是1楼呢
zhangfjj 2004-11-19
  • 打赏
  • 举报
回复
2种解决方法
lhymjdlhy 2004-11-18
  • 打赏
  • 举报
回复
class A的拷贝构造函数的形参是同类型的const &,而成员函数foo是非const的,一个const型的对象当然不能调用它的非const型的成员函数(虽然这个函数其实什么也没做,更谈不上更改数据成员了).

64,683

社区成员

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

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