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 параметров. Если посмотрите на ваш код в этом живой пример вы увидите, что единственными ошибками, которые вы получаете, является проблема с вызовом несуществующего конструктора.
Если вы посмотрите на это Страница справки E2188 ошибка от embarcadero, что бит на ошибку:
Если ошибка произошла в другом операторе, синтаксическая ошибка, вероятно, в окружающем коде.