"E2188 Expression syntax error" 将默认构造的对象传递给函数时

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

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

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

myFunc( MBool( false ) );

而不是来自:

myFunc( ( MBool() ) );

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

如果您查看来自 embarcadero 的这个 E2188 help page 错误,它在错误上的位:

If the error occurred in another statement, the syntax error is probably in the surrounding code.

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

这是一个 MCVE:

void f(int) {}

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

解决方法是去掉多余的一对括号。