奇怪的问题

mengxiangying504 2008-10-06 08:13:40
#include <iostream>
using std::cout;
using std::endl;

class test
{
public:
test() : num(0) {}
test(int in) : num(in) {}
test(const test& Te)
{
num = Te.getData();
// num = Te.num;
cout << "copy constructor!" << endl;
}
test& operator =(const test& Te)
{
// num = Te.getData();
// num = Te.num;
cout << "operator func!" << endl;
return *this;
}
int getData()
{
return num;
}
private:
int num;
};

int main()
{
test t1(5);
test t2(t1);
test t3 = t1;
test t4;
t4 = t1;
return 0;
}
有颜色的的一行出现错误“'getData' : cannot convert 'this' pointer from 'const class test' to 'class test &'”谁这道是什么意思?为什么会出现这个错误?谢谢
...全文
145 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
frank_ll 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mengxiangying504 的回复:]
另外当这样写复制构造函数test(const test& Te) :num(Te.num) {} 会出现错误,为何?麻烦再给我解决下这个问题
[/Quote]
你的Te.num中num是private的吧
太乙 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mengxiangying504 的回复:]
另外当这样写复制构造函数test(const test& Te) :num(Te.num) {} 会出现错误,为何?麻烦再给我解决下这个问题
[/Quote]



#include <iostream>
using namespace std;

class A
{
public:
A(int i):ai(i){}
A(const A & a):ai(a.ai){}
void Fun(){cout<<ai;}
protected:
private:
int ai;
};

int main()
{
A a(9);
A b=a;
b.Fun();
system("pause");
return 0;
}


qqwx_1986 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mengxiangying504 的回复:]
另外当这样写复制构造函数test(const test& Te) :num(Te.num) {} 会出现错误,为何?麻烦再给我解决下这个问题
[/Quote]
有什么错 编译还是运行错误
没错吧
mengxiangying504 2008-10-07
  • 打赏
  • 举报
回复
另外当这样写复制构造函数test(const test& Te) :num(Te.num) {} 会出现错误,为何?麻烦再给我解决下这个问题
study_live 2008-10-06
  • 打赏
  • 举报
回复
一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。原因如下:如果返回值为某个对象为const(const A test = A 实例)或某个对象的引用为const(const A& test = A实例) ,则返回值具有const属性,则返回实例只能访问类A中的公有(保护)数据成员和const成员函数,并且不允许对其进行赋值操作,这在一般情况下很少用到。
xmczr 2008-10-06
  • 打赏
  • 举报
回复
const的对象只能调用const的成员函数,所以你要改掉getData的函数申明,改为const类型
wzfhandsomelove 2008-10-06
  • 打赏
  • 举报
回复
类是const 的
成员函数当然也得是const的了
qqwx_1986 2008-10-06
  • 打赏
  • 举报
回复
#include <iostream>
using std::cout;
using std::endl;

class test
{
public:
test() : num(0) {}
test(int in) : num(in) {}
test(const test& Te)
{
num = Te.getData();
// num = Te.num;
cout << "copy constructor!" << endl;
}
test& operator =(const test& Te)
{
// num = Te.getData();
// num = Te.num;
cout << "operator func!" << endl;
return *this;
}
int getData() const
{
return num;
}
private:
int num;
};

int main()
{
test t1(5);
test t2(t1);
test t3 = t1;
test t4;
t4 = t1;
return 0;
}
是正确的
vc6能编译通过
mengxiangying504 2008-10-06
  • 打赏
  • 举报
回复
我试了改成const不行,原因不在这里。
mengxiangying504 2008-10-06
  • 打赏
  • 举报
回复
另外当这样写复制构造函数test(const test& Te) :num(Te.num) {} 会出现错误,为何?
mengxiangying504 2008-10-06
  • 打赏
  • 举报
回复
为什么呢?
kkndciapp 2008-10-06
  • 打赏
  • 举报
回复
把getData改成const函数

65,211

社区成员

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

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