2017-12-17 51 views
0
main.cpp: In function ‘void PrintVector(std::vector<std::__cxx11::basic_string<char> >&, bool)’: 
main.cpp:16:41: error: overloaded function with no contextual type information 
    std::cout << ((newline)? (std::endl) : ""); 
             ^~ 

なぜstd :: endoutが好きで、条件付きの場合は文字列ですか?std :: coutはstd :: endlが好きでなく、文字列が条件付きの場合

+0

三項演算子は、同じタイプの結果値を必要とし、あなたのコード –

+1

共有してください。 – user0042

+0

ここで三項演算子を使用するパフォーマンス理由もありません。 '?:'とif-else文の相違点は、I/O操作のコストによって隠されます。 –

答えて

0

私はそれを変更: '(速いだろう):

std::cout << (newline? '\n' : '') << std::flush; 

ので 『とそれを書き込むことはできません

std::cout << (newline? "\n" : "") << std::flush; 

』が空であり、「エラーにつながる:空文字定数 "である。

で溶液条件-場合は、1つは、以下の好むべきであると非常に複雑である:

if (newline) std::cout << std::endl; 
2

std::endlはストリームマニピュレータです。それは関数です。一般的なタイプは""ではありません。したがって、条件式の2つのタイプになることはできません。一般的な型は式全体の型です。

std::endlは新しい行を追加するだけでなく、新しい行を印刷する場合は"\n"と置き換えてください。このようにして、共通タイプはすべての通常の変換がオペランドで実行された後にconst char*に導かれます。

関連する問題