这是我的部分代码:
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);
}
编译后遇到两个问题:
_pObject = pObject;
: 没有可行的重载 '='pClassA->init(&this);
: 地址表达式必须是左值或函数指示符
我对这些问题感到困惑...我该如何解决?
最佳答案
首先,问题中有错别字。我假设 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&
.
关于c++ - 传递对象地址时为 "Address expression must be an lvalue or a function designator",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10516554/