c++ - 传递对象地址时为 "Address expression must be an lvalue or a function designator"

标签 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);
}

编译后遇到两个问题:

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

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

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

最佳答案

首先,问题中有错别字。我假设 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& .

关于c++ - 传递对象地址时为 "Address expression must be an lvalue or a function designator",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10516554/

相关文章:

c++ - 当 C++ winrt 页面类与 XAML 页面一起使用时,不是成员错误

c++ - 如何使用 UIA 获取 HEX 中 IUIAutomationElement 的窗口句柄?

c++ - 通过在 2 个服务器之间相互发送套接字来共享套接字 (WINSOCK)

c++ - 将全局引用计数资源与原子同步——在这里放宽合适吗?

c++ - 在自定义容器上使用范围算法

指向函数的 C++ 指针导致段错误

c++ - 升压::多索引。更快的解决方案?

c++ - 为什么 boost-constructors 的工作方式如此不同?

c++ - FILE *f 在 C++ 中初始化为什么?

c++ - 将 wstring 转换为 TCHAR 的问题