2

何が問題なのか教えていただけますか?: 演算子はエラーを示します:

 C2446: ':' : no conversion from 'int' to 'std::basic_ostream<_Elem,_Traits>'   
           c:\documents\visual studio 2005\projects\8.14\8.14\8.14.cpp  36

コード:

int _tmain(int argc, _TCHAR* argv[])
{
int B;
int A=(6,B=8);
bool c = true;
cout << endl << B;
while (B != 100)
{
cout << "qgkdf\n";
(A<B) ? (c = 100, B=100, cout << "!!!") : (A = 100);
A--;
}
_getch();
return 0;
}
4

4 に答える 4

3

条件演算子の 2 つのオペランドの型は同じである必要があります。

(A<B) ? (c = 100, B=100, cout << "!!!") : (A = 100);

の型c = 100, B=100, cout << "!!!"は の型でありcout << "!!!"、これはstd::ostreamです。

の型はA = 100ですint

これら 2 つのタイプが一致しないため、エラーが発生します。

編集: コンマ演算子は、最後の部分の値を返します。次のように、int を追加することはできません。

(A<B) ? (c = 100, B=100, (cout << "!!!"), 42) : (A = 100);
//                                      ^^^^

ライブの例はこちら.

于 2013-07-20T10:08:01.610 に答える
2

難読化されたコードを作成する場合は、キャストの使用方法を理解していることを確認してください。解決策は明らかに の結果を にキャストすることcout << "!!!"ですint

(A<B) ? (c = 100, B=100, reinterpret_cast<int>(cout << "!!!")) : (A = 100);
于 2013-07-20T10:09:49.583 に答える
1

戻り値が使用されていないため、両側を void にキャストする方が明確な場合があります。
古き良き「if」を使用するほど明確ではありませんが。

于 2013-07-20T10:46:27.087 に答える
1

これは ?: 演算子のあからさまな乱用です。ifステートメントを使用します。それが彼らの目的です。

于 2013-07-20T12:46:52.033 に答える