C++ &引用;地址表达式必须是左值或函数指示符;通过对象时';地址
以下是我的部分代码:C++ &引用;地址表达式必须是左值或函数指示符;通过对象时';地址,c++,C++,以下是我的部分代码: 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;
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);
}
编译后我遇到了两个问题:
\u pObject=pObject代码>:没有可行的重载“=”
pClassA->init(&this)代码>:地址表达式必须是左值或函数指示符
*this
,因为&this
的类型是ClassB**
,而不是ClassB&
2) 只能在构造函数中初始化引用成员变量:
classA::classA(classB& b) : _pObject(b)
{
}
(顺便说一句,我想你只是为了简洁而写了
delete
语句)首先,问题中有一个拼写错误。我假设A
和classA
指的是同一类,与B
和classB
相同
1) 引用和指针之间的几个区别之一是,一旦对引用进行了初始化,就不能为其指定不同的值。因此,虽然可以在类A
的构造函数的初始化列表中对其进行初始化,但不能将其分配给\u pObject
:
classA::classA(classB& object) : _pObject(object) // Correct
{
// _pObject = object; on the other hand, this would be incorrect
}
2)
&this
是this
的地址,但实际上您希望引用this
指向的值。您需要改用*此
。尽管我们已经看到,无法使函数classA::init
与当前的类设计配合使用。如果您真的想在构建对象后更改\u pObject
的值,则需要将其设置为classB*
,而不是classB&
,他刚才的回答顺序相反;答案2)是针对你的问题1。