2016-06-24 5 views
0

ostreamを扱うスイッチでは、オブジェクトの正確なテンプレートタイプを指定する関数はほとんどありません。 しかし、何とか入れ子関数を使用しているときに、余分なアドレスが出力ストリームに表示されます。ネストされた関数を使用すると、Ostream出力で余分なアドレスが発生する

コード例:

#include <iostream> 

using namespace std; 


ostream & tmp2(ostream & in) 
{ 
    return in << "out"; 
} 

ostream & tmp(ostream & in) 
{ 
    return in << tmp2(in); 
} 

int main(int argc, char** argv) 
{ 
    int t = 2; 
    switch (t) 
    { 
     case 2: 
     std::cout << tmp; 
    } 
    return 0; 
} 

OUTPUT: "out0x600e08"

任意のアイデア理由があり、これを防止するために、どのように?

と同等です
+0

あなたは 'のstd :: coutの<< TMP(CIN)したいです;'。 –

+0

あなたのコードは私に[コンパイルエラー](http://melpon.org/wandbox/permlink/19CciuvkFMECj4yc)を与えました。あなたのコンパイラは何ですか? – MikeCAT

+1

@πάνταῥεῖいいえ、関数 'tmp()'には1つの引数が必要です。 – MikeCAT

答えて

1
ostream & tmp(ostream & in) 
{ 
    return in << tmp2(in); 
} 

:あなたは、おそらく使用することを意図し

ostream & tmp(ostream & in) 
{ 
    tmp2(in); 
    in << in; // This line causes the extra output. 
    return in; 
} 

ostream & tmp(ostream & in) 
{ 
    return tmp2(in); 
} 
+0

これはこれでした!ありがとう – Ambrase

関連する問題