3

作業中のプロジェクトにVisualStudioを使用していますが、Linux上のGCCでもコンパイルする必要があります。プロジェクトを完了し、正常に実行されましたが、ファイルをLinuxシェルに送信したところ、簡単なコード行でエラーが発生しました。

std::ifstream input(s);

これにより、一致する関数がないというエラーが発生します。ちなみにですsstd::stringifstreamのドキュメントを見ているのに、なぜこれがVisual Studioで実行され、GCCでは実行されないのかを誰かに教えてもらえますか?おそらく古いバージョンのGCCですか?

編集:GCCバージョンは4.2.1です。正確なエラーは次のとおりです。

error: no matching function for call to 'std::basic_ifstream<char,  
std::char_traits<char>>::basic_ifstream(std::string&)'

編集2:関連コード:

std::string s = "";
if(argc == 2)
    s = argv[1];
else{
    std::cout << "Bad filename?" << std::endl;
    return 1;
}
std::ifstream input(s);
4

1 に答える 1

7

GCCの最新バージョンをダウンロードし、-std=c++0xオプションを使用してプログラムをコンパイルします。C ++ 11では、ストリームクラスにはstd::string引数を取るコンストラクタがあり、GCCはデフォルトでC ++ 11を有効にしないため、-std=c++0xコンパイラオプションを指定して有効にする必要があります。

C ++ 11を使用できない場合は、次のようにします。

std::ifstream input(s.c_str());

これは、C++03とC++11の両方でコンパイルする必要があります。

于 2012-04-24T17:07:27.003 に答える