2013-07-20 29 views
2

你能告訴我有什麼問題?:運算符,它告訴錯誤:操作逗號在C++?:條件

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; 
} 
+0

我認爲','不是一個運算符和行int A =(6,B = 8);'不正確 –

+5

@ABFORCE它是一個運算符。 – hvd

+0

@ hvd:可以超負荷嗎? –

回答

3

的類型2個操作數的有條件的操作符需要相同。

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

類型的c = 100, B=100, cout << "!!!"cout << "!!!"的類型,這是std::ostream

A = 100的類型是int

這兩種類型不匹配,因此錯誤。

編輯:逗號運算符返回最後一部分的值。例如,您不能添加int:

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

Live example here

+0

確定我的錯誤 –

+0

(A thomas

+0

@thomas這也是一個解決方案。由於OP似乎想要對代碼進行混淆,因此我不會選擇哪一個; – Synxis

2

如果你打算寫混淆代碼,請確保您知道如何使用強制類型轉換,作爲解決方案顯然是把結果的cout << "!!!"int

(A<B) ? (c = 100, B=100, reinterpret_cast<int>(cout << "!!!")) : (A = 100); 
1

由於返回值不被使用它可能會更清楚地讓雙方都失效。
雖然不如使用一個好的舊「如果」一樣清晰。

1

這是公然濫用?:操作符。使用if語句。這就是他們的目的。