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

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

4

2 回答 2

2

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

这是一个MCVE:

void f(int) {}

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

作为一种解决方法,取出多余的一对括号。

于 2015-06-15T07:43:07.970 回答
0

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

myFunc( MBool( false ) );

而不是来自:

myFunc( ( MBool() ) );

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

如果您查看来自 embarcadero 的此E2188 帮助页面错误,则该错误中包含该位:

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

于 2015-06-03T15:41:25.717 回答