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

  • 我对这些问题感到困惑。。。我如何解决这个问题?

    1)您应该在本文中使用
    *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。