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メソッドの 2 行目でのみ発生し、他のすべてのケースでは正常にコンパイルされます。

編集 申し訳ありませんが、私の例に間違ったコンストラクターを貼り付けましたが、修正されました。括弧で囲まれた場合、ブール値パラメーターを持つコンストラクターはコンパイルされますが、パラメーターなしのコンストラクターはコンパイルされません。

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 ) );渡していますが、0パラメーターを取るコンストラクターしかありません。これであなたのコードを見ると、発生する唯一のエラーは、存在しないコンストラクターを呼び出すことに関する問題であることがわかります。falseMBoolMboollive example

Embarcadero からのこのE2188 ヘルプ ページエラーを見ると、エラーに関するビットが次のように表示されます。

エラーが別のステートメントで発生した場合、構文エラーはおそらく周囲のコードにあります。

于 2015-06-03T15:41:25.717 に答える