データを表示するために CSV ファイルを記述する必要があるプロジェクトがあります。 Githubにminicsvというcsvの軽量読み書きライブラリがあったのでダウンロードしてみました。ただし、サンプルのコンパイル時に次の問題が発生しました:
example.cpp からインクルードされたファイル内:1:0:
minicsv.hpp: 関数内
'csv::ofstream& 演算子<<(csv::ofstream&, const
T&)':
minicsv.hpp:326:38: エラー: 呼び出しに一致する関数がありません
'csv::ofstream::escape_and_output(std::basic_ostringstream
ostm.escape_and_output(os_temp.str());
^
minicsv.hpp:326:38:
注: 候補は:
minicsv.hpp:266:8: 注: 無効です
csv::ofstream::escape_and_output(std::string&)
void
escape_and_output(std::string & src)
...
エラーが多いので、スペースを取るのでこれ以上は載せません。これらのエラーはすべて同じ関数ヘッダーから発生します。関数ヘッダーは次のように定義されています:
voidscape_and_output(std::string & src)
そして呼び出し時は次のようになります:
ostm.escape_and_output(os_temp.str());
明らかに、呼び出し時の関数ヘッダーには右辺値参照が必要で、実際の関数ヘッダーは左辺値参照を与えます。 2 つは一致しないため、コンパイラはエラーを報告します。変更は非常に簡単で、「&」を「&」に変更するだけです。つまり、関数ヘッダーを次のように変更します。
voidscape_and_output(std::string &
src)
非常に明らかな間違いなので、最初は書きたくなかったのですが、c++0x に詳しくない人が戸惑うのではないかと思い、投稿しました。また、なぜプロジェクトにこのような明らかなエラーがあるのかわかりません。おそらく、上司のコンパイラが賢すぎるのでしょう。
その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。