我有这个类实例
ControlPanel *cp = new ControlPanel();
另一个类需要访问cp中的方法,所以我
Monitor *cpmon = new Monitor(cp);
Monitor类标题看起来像
class Monitor {
public:
Monitor(ControlPanel *_cp);
~Monitor();
private:
ControlPanel *cp;
}
并且Monitor构造函数看起来像
#include "Monitor.h"
Monitor::Monitor(ControlPanel *_cp)
{
*cp = _cp; //doesn't work
}
错误是:
'operator ='不匹配(操作数类型为'ControlPanel'和'ControlPanel *')
现在我打印了指针地址,我可以从构造函数中访问方法,例如,如果我执行_cp-> SomeMethod它可以工作,但我不知道如何编写私有* cp实际上是_cp指向的相同地址,以便我可以从Monitor的方法中访问最顶层的cp,而不仅仅是在其构造函数中 - 我读了很多 - 尝试了很多东西,得到了很多不同的错误,但我不能让它工作。有人可以澄清吗?我该如何分配私人* cp _cp的地址? 谢谢
答案 0 :(得分:1)
问题是您取消引用指针并将其指定给指针。要修复,只需从
更改即可*cp = _cp;
到
cp = _cp;
答案 1 :(得分:0)
ControlPanel必须为您提供赋值运算符(内置赋值运算符可以进行按位复制,从而为您提供segfuault)或者您应该只使用指向ControlPanel的指针(而不是复制ControlPanel对象)。
这两种方法都有其优点和缺点。如果我可以访问控制面板的源代码,我会编写一个有效的赋值运算符(如果需要的话!必须小心地编写C ++中的特殊类函数,以避免以后出现意外和痛苦的麻烦。)