类成员包含一个"引用",编译错误,如何解决?
看过一些别人写的代码,在类的成员声明的时候,可以采用一个引用符号来替代指针,并且该引用要在构造函数的初始化列表里面赋值。如下:
- C/C++ code
struct s{ void f(){} virtual void g(){} void p(){printf("%p,%p\n",&s::f,&s::g);} int i; int j; int k;}obj;struct ref{ s& m_s; ref(s& ss):m_s(ss){}};int main(void){ printf("%d\n",sizeof(ref)); return 0;}
把main函数改成:
- C/C++ code
int main(void){ ref r(obj); printf("%d\n",sizeof(ref)); return 0;}
1>my.cpp(14): warning C4512: “ref”: 未能生成赋值运算符
1> my.cpp(11) : 参见“ref”的声明
如果解决? 我的构造函数写的有问题还是别的地方?
[解决办法]
不是warning么?
obj不是引用吧,你写的那构造函数参数需要是引用类型
[解决办法]
我运行那代码没问题 同样输出:4
[解决办法]
引用的赋初值
[解决办法]
vs6 vs2008 均为发现楼主所说的警告
另外,这个警告是说
编译器 后台生成的 ref::operator= 失败
类里有了引用成员
引用必须在有初值,且始终指向初值
如果 operator= 成功,引用不就可以改变指向了吗?
于是 编译器 无法为你生成 operator=
[解决办法]
我最不喜欢有人用struct还给这个struct定义什么构造函数,析构函数什么的,最讨厌了。把C++和C给混淆了,不得好下场。