我正在尝试在 C++ 中执行此操作:
class Abc
{
int callFunction1()
};
void function1(Abc** c1) {//do something}
int Abc::callFunction1()
{
function1(&this);
return 0;
}
我在 Visual Studio 2015 中得到“表达式必须是左值或函数指示符”错误。所以我不明白我哪里出错了。据我所知, &this
应该是 Abc**
类型,对吗?
函数定义不是我要更改的。所以我不能只改变参数类型。
原文由 disccip 发布,翻译遵循 CC BY-SA 4.0 许可协议
错误很清楚。由于
this
不是左值,因此您无法获取其地址。如果您只想要对象的地址,则只需传递this
,而不是&this
,并将函数声明更改为:但是,由于您提到无法更改函数的定义,您可以创建一个临时变量并传递其地址:
这是如何工作的:
this
是纯右值 并且不能获取其地址,因此您需要指向它以将其转换为左值,此处为temp
。temp
points tothis
, takingtemp
’s address will effectively takethis
’s address, albeit indirectly.function1
,因此代码可以按预期编译和工作。