以下是我的代码的一部分:
class A
{
public:
void init(classB& pObject);
classB& _pObject;
}
void classA::init(classB& pObject)
{
_pObject = pObject;
}
class B
{
public:
void init();
}
void classB::init()
{
classA* pClassA = new classA;
pClassA->init(&this);
}
编译后我遇到了2个问题:
_pObject = pObject;
:没有可行的重载'='
pClassA->init(&this);
:地址表达式必须是左值或函数指示符
我对这些问题感到困惑......我该如何解决这个问题?
答案 0 :(得分:2)
1)您应该在此上下文中使用*this
,因为&this
的类型为ClassB**
,而不是ClassB&
;
2)您只能在构造函数中初始化引用成员变量:
classA::classA(classB& b) : _pObject(b)
{
}
(顺便说一句,我想你为了简洁而省略了delete
声明)
答案 1 :(得分:2)
首先,问题中存在拼写错误。我假设A
和classA
引用同一个类,同样适用于B
和classB
。
1)引用和指针之间的一些差异是,一旦初始化引用,就不能为引用分配不同的值。所以你不能分配给_pObject
,尽管你可以在类A
的构造函数的初始化列表中初始化它:
classA::classA(classB& object) : _pObject(object) // Correct
{
// _pObject = object; on the other hand, this would be incorrect
}
2)&this
是this
的地址,但您实际上想要引用this
指向的值。您需要使用*this
代替。虽然我们已经看到没有办法让函数classA::init
与你当前的类设计一起工作。如果您确实要在构建对象后更改_pObject
的值,则需要将其设为classB*
而不是classB&
。