2010-03-12 97 views
0
char b; 

operator<<(cout,(operator>>(cin,b))); 

這不是在vC++編譯,因爲所有8個重載都不能轉換這種類型。運營商內部運營商不工作

任何一個可以解釋這種.....

是它們與返回類型的問題...........

+1

請不要...但我只是覺得它:'char b; cout << ((cin >> b),b)' – 2010-03-12 11:18:33

+0

請注意,使用'operator <<(cout,b)'不是慣用的。 'cout << b'在語義上是等價的,但是寫和讀更容易。 @大衛:哦,地獄! – 2010-03-12 12:03:06

回答

6

流提取操作即op>>返回的一個目的鍵入istream&op<<沒有以istream&作爲第二個參數的超載。您需要拆分這兩個動作或定義一個這樣的重載。

0
char b; 
operator<<(cout,(operator>>(cin,b),b)); 
+3

與David Rodriguez的評論中的代碼相似,18分鐘前發佈。 – 2010-03-12 11:41:08

+0

不錯的一個。 OP的代碼的另一種解釋是:'cout.operator <<(operator>>(cin,b))'。這將打印cin的地址,雖然(轉換爲'void *'的結果)。 – visitor 2010-03-12 11:52:29

0

的問題是,將工作輸出操作需要void*,但是這是一個成員。如果您將其更改爲以下,這將是由operator>>返回istream&轉換爲void*和輸出它(它是一個空指針,如果提取工作,和一個非NULL指針,否則):

cout.operator<<(operator>>(cin,b)); 

我不確定你爲什麼這麼做。你能否詳細說明一下?如果你想馬上輸出來自cin的所有東西,請使用底層緩衝區

cout << cin.rdbuf();