传递对象的地址时,“地址表达式必须是左值或函数指示符”

时间:2012-05-09 12:52:46

标签: 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;
  pClassA->init(&this);
}

编译后我遇到了2个问题:

  1. _pObject = pObject;:没有可行的重载'='

  2. pClassA->init(&this);:地址表达式必须是左值或函数指示符

  3. 我对这些问题感到困惑......我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

1)您应该在此上下文中使用*this,因为&this的类型为ClassB**,而不是ClassB&;

2)您只能在构造函数中初始化引用成员变量:

classA::classA(classB& b) : _pObject(b)
{
}

(顺便说一句,我想你为了简洁而省略了delete声明)

答案 1 :(得分:2)

首先,问题中存在拼写错误。我假设AclassA引用同一个类,同样适用于BclassB

1)引用和指针之间的一些差异是,一旦初始化引用,就不能为引用分配不同的值。所以你不能分配给_pObject,尽管你可以在类A的构造函数的初始化列表中初始化它:

classA::classA(classB& object) : _pObject(object) // Correct
{
  // _pObject = object;        on the other hand, this would be incorrect
}

2)&thisthis的地址,但您实际上想要引用this指向的值。您需要使用*this代替。虽然我们已经看到没有办法让函数classA::init与你当前的类设计一起工作。如果您确实要在构建对象后更改_pObject的值,则需要将其设为classB*而不是classB&