"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
}
解决方法是去掉多余的一对括号。
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
}
解决方法是去掉多余的一对括号。