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

时间:2015-06-03 14:31:37

标签: c++ c++builder c++builder-xe7

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方法的第二行,所有其他情况都可以正常编译。

修改 对不起,我在我的示例中粘贴了错误的构造函数,现在已经修复了。当用括号括起来时,带有boolean参数的构造函数会编译,但无参数构造函数不会编译。

2 个答案:

答案 0 :(得分:2)

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

这是一个MCVE:

void f(int) {}

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

作为一种解决方法,请取出额外的一对括号。

答案 1 :(得分:0)

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

myFunc( MBool( false ) );

而不是来自:

myFunc( ( MBool() ) );

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

如果你从embarcadero看到这个E2188 help page错误,那就是错误:

  

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