2012-02-14 14 views
3

私はVisual C++ 2008 SP1 Proを使用しています。コードスニペットの後にはコンパイルに失敗します。System :: BooleanとboolはC++/CLIで比較できませんか?

1>.\main.cpp(3) : warning C4805: '==' : unsafe mix of type 'System::Boolean ^' and type 'bool' in operation 
1>.\main.cpp(3) : error C2446: '==' : no conversion from 'int' to 'System::Boolean ^' 
1>  No user-defined-conversion operator available, or 
1>  No standard conversion exists from the boxed form of the arithmetic type to the target type 
1>.\main.cpp(3) : error C2040: '==' : 'System::Boolean ^' differs in levels of indirection from 'int' 

次のコードは罰金コンパイル:

int main(void) { 
    System::Boolean^ foobar = true; 
    if (foobar->Equals(true)) { 
     System::Console::Write("yeah!"); 
    } 
} 

私が何か間違ったことをやっている

int main(void) { 
    System::Boolean^ foobar = true; 
    if (foobar == true) { 
     System::Console::Write("yeah!"); 
    } 
} 

これは、次のエラーを与えますか? System :: BooleanとC++/CLIのboolを比較するには、 - > Equals()および - > CompareTo()を使うより良い方法がありますか?

+1

なぜあなたはブーリアンと真実を比較するのですか? – delnan

+0

[System :: Boolean変数の3項演算子](http://stackoverflow.com/questions/8744929/ternary-operator-on-systemboolean-variable)の可能な複製。 –

+0

フレデリック、リンクありがとう。解決策は '^'文字を削除しています。 – xxx

答えて

4

System::Boolean^は、の参照と(ボックス化された)ブール値です。代わりにSystem::Booleanを使用してください。

0

の代わりに:

if (foobar == true) 

使用:

if (foobar) 

それともそれは簡単なロジックのためだ場合は通常のブール値を使用します。

int main(void) { 
    bool foobar = true; 
    if (foobar) { 
     System::Console::Write("yeah!"); 
    } 
} 

VSでの問題はブール値であるということですintであるので、オブジェクトを整数と比較することは意味をなさない。

関連する問題