3

这是我的代码的一部分:

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);: 地址表达式必须是左值或函数指示符

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

4

2 回答 2

2

首先,问题中有一个错字。我假设AclassA引用同一个类,对于Band 也是如此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在构造对象后更改 的值,则需要将其设置为 aclassB*而不是 a classB&

于 2012-05-09T13:30:26.230 回答
2

1)您应该*this在这种情况下使用,就像&this类型一样ClassB**,而不是ClassB&

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

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

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

于 2012-05-09T12:54:40.420 回答