【问题标题】:I'm trying to compile with g++ and i'm getting the below error [duplicate]我正在尝试使用 g++ 进行编译,但出现以下错误 [重复]
【发布时间】:2013-02-21 06:53:32
【问题描述】:

我正在尝试使用 g++ 进行编译,但出现以下错误

if(nmFunctions && nmFunctions->updateAddressResponseHandler)

错误:'operator&&' 不匹配

【问题讨论】:

  • 值得引用你的类和 nmFunctions 的声明(基本部分)

标签: c++ operator-keyword


【解决方案1】:

我猜updateAddressResponseHandler 是一个函数,你想调用它并检查它的返回值。在这种情况下,您需要调用它:

if(nmFunctions && nmFunctions->updateAddressResponseHandler())
//                                                         ^^

如果不是这样,请发布updateAddressResponseHandler 的定义,并描述你想用它做什么。

【讨论】:

  • 这会导致不同的错误(警告),至少在我正在使用的编译器上 - "the address of updateAddressResponseHandler will always evaluate as 'true'"
  • @Dukeling:大概在您的测试中updateAddressResponseHandler 是一个函数指针。如果它是成员函数,您将再次收到不同的错误(不是警告),因为 nmFunctions->updateAddressResponseHandler 在这种情况下不是有效的表达式。没有更多信息,我们只能猜测是哪种情况。
【解决方案2】:

问题是对象nmFunctions 不能隐式转换为布尔值,或者不知道如何处理&& 运算符。

-> 我猜它可能是shared_ptr,在这种情况下,您需要将其显式转换为bool - (bool)nmFunctions && ...

请注意,如果nmFunctions 类具有以下任一功能,那应该可以解决您的问题。 shared_ptr 使用另一个强制显式转换的版本。

为什么首选第一种方式应该很明显。

// allow for "(bool)nmFunctions" or implicit casting
operator bool() { return someBoolean; }

// allow for "nmFunctions && (boolean)"
bool operator&&(bool b) { return b && someBoolean; }

另外,updateAddressResponseHandler 听起来像一个函数名。如果是,则需要将其更改为updateAddressResponseHandler(),否则无法编译。

【讨论】:

  • 请考虑以下代码:class x { public: void (*updateAddressResponseHandler)(void); }; int main(int argc, char **argv) { x *nmFunctions = 0; if(nmFunctions && nmFunctions->updateAddressResponseHandler) { nmFunctions = 0; } return 0; }。 g++ 完美编译。
  • @Serge 我不太理解您的评论。我解释了错误的可能原因(希望有足够的细节让 OP 修复它),而不是如何围绕给定代码构建结构(这将与现有代码冲突并且几乎没有任何用途)以使给定代码工作.
  • 对不起,我的意思是updateAddressResponseHandler可能是一个函数指针。早些时候我已经要求 OP 澄清这个问题,否则任何猜测他的代码为什么会产生编译错误的尝试都是浪费时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
相关资源
最近更新 更多