传递对象地址时"Address expression must be an lvalue or a function designator"
"Address expression must be an lvalue or a function designator" when passing an object's address
这是我代码的一部分:
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 个问题:
_pObject = pObject;
:没有可行的重载"="pClassA->init(&this);
:地址表达式必须是左值或函数指示符
我对这些问题感到困惑...我该如何解决这个问题?
首先,问题中有一个错别字。我假设A
和classA
指的是同一个类,B
和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
的值,则需要将其设置为classB*
而不是classB&
。
1)在这种情况下,您应该使用*this
,因为&this
具有ClassB**
的类型,而不是ClassB&
;
2) 您只能在构造函数中初始化引用成员变量:
classA::classA(classB& b) : _pObject(b)
{
}
(顺便说一句,我想你省略了delete
声明只是为了简洁起见)
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- N-API include an .so or dll
- 为什么这些代码仍然使用 lvalue 函数?
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- 编译错误:"lvalue required as left operand of assignment" 不确定原因
- "expression must be a modifiable lvalue"是什么意思?
- 如何理解"abstract-declarator containing an ellipsis shall only be used in a parameter-declaration"
- 如何在数据库程序中添加"reduce the quantity of an item"功能?
- C++线程"Call to non-static member function without an object argument"
- Atom gpp编译器给出"'C:UsersadminUser' is not recognized as an internal or..."错误
- 尝试在类中编译内核,出现错误"__init__() got an unexpected keyword argument 'kernel'"
- 指向对象生存期之外的已分配内存的指针是"invalid pointer[s]"还是"pointer[s] to an object"?
- 如何修复" State Error (active) E0513 a value of type "const wchar_t *" cannot be assigned to an entity o
- C++ libtins "An invalid handle was specified"
- "terminate called after throwing an instance of std::invalid_argument' what(): stoi ?"
- Hash for a std::pair, for use in an unordered_map
- 为什么我的某些数据成员"expression must be an lvalue or a function designator"收到此错误?
- 如何修复"initial value of reference to non-const must be an lvalue?"
- 传递对象地址时"Address expression must be an lvalue or a function designator"
- 将一个数组中的引用分配给另一个数组 - "warning: target of assignment not really an lvalue"