繁体   English   中英

将默认构造的对象传递给函数时出现“ E2188表达式语法错误”

[英]“E2188 Expression syntax error” when passing default-constructed object to function

class MBool  
{
   protected:
      bool  mData;  
   public:
      MBool() : mData(false)          {}
      MBool(bool  Data)               { mData = Data; }
};

void myFunc ( const MBool& rBool )
{
}

bool test()
{
   myFunc( MBool() );
   myFunc( ( MBool() ) );  // <-- Error E2188 Expression syntax
   myFunc( MBool( false ) );
   myFunc( ( MBool( false ) ) ); 
}

有人可以帮忙解释以上错误吗? 它使用Embarcadero的XE7发生。 使用Visual Studio可以正确编译相同的代码。 如图所示,XE7上的问题仅出现在test方法的第二行,其他所有情况都可以编译。

编辑抱歉,我在示例中粘贴了错误的构造函数,现已修复。 当用括号括起来时,带有布尔参数的构造函数将编译,但是无参数构造函数将不会编译。

这是bcc32.exe中的错误。 该代码可在bcc64中正常工作。

这是一个MCVE:

void f(int) {}

int main()
{
    f((int()));    // E2188 Expression syntax
}

解决方法是,删除多余的一对括号。

我认为您得到的错误实际上来自:

myFunc( MBool( false ) );

并非来自:

myFunc( ( MBool() ) );

myFunc( MBool( false ) ); 您将false传递给MBool的构造函数,但是Mbool只有一个带有0个参数的构造函数。 如果在此实时示例中查看您的代码,您将看到唯一的错误是调用不存在的构造函数的问题。

如果您查看embarcadero的E2188帮助页面错误,那么该错误就可以解决:

如果该错误在另一条语句中发生,则语法错误可能在周围的代码中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM