2012-04-24 10 views
3

私は作業中のプロジェクトでVisual Studioを使用していましたが、LinuxのGCCでもコンパイルする必要があります。私は自分のプロジェクトを完了しているし、それが正常に動作しますが、私は私のLinuxシェルにファイルを介して送信さと私はコードの些細な行でエラーを受信:g ++でifstreamエラーが発生しましたが、Visual Studioでコンパイルする

std::ifstream input(s); 

これは、一致する関数が存在しないと言って私にエラーを与えます。ちなみにsstd::stringです。 ifstreamのドキュメンテーションを見ていても、Visual Studioでは動作しますが、GCCでは動作しない理由を誰にでも教えてください。おそらく古いバージョンのGCCですか?

EDIT:GCCのバージョン4.2.1正確なエラーがでている。

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

EDIT 2:関連するコード:

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

エラーは何ですか? – Joe

+0

これ:http://ideone.com/w6IJ5はうまく動作します。おそらく完全なコードを投稿するべきです。 –

+0

@RoryYorke唯一の関連コードであると私は信じて更新しました。 –

答えて

6

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

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

これはコンパイルする必要があります

あなたがC++ 11を使用することができない場合は、これを行います。

+0

オプションではなく、コードを変更して実行するにはどうすればよいですか? –

+0

'open'を呼び出してコードを変更しようとしましたが、エラーも発生します。 –

+0

@AustinHenley:私の更新された答えを見てください。また、エラーが表示されたらPOST ITをクリックします。このエラーについて私たちに推測させてください。 – Nawaz