2012-04-11 4 views
3

、私は次の式を使用していました簡単なプログラムです。 "グラムではifstreamを使用してファイルを読み込むの違い++とMSVC

コンパイルし、g ++コンパイラを使用して期待通りに実行します。

しかし、msvc 2008を使用してコンパイルしたときと同じコードでは、抽出演算子(>>)でエラーが返され、std :: stringを初期化された文字配列またはサポートされている任意のネイティブ型のいずれかに置き換える必要があります。
標準ライブラリの使用方法が実装全体で同じになると予想していたので、これは私を捨てました。
私はコンパイルエラーを理解し、c_str()を使って修正する方法を知っています。

しかし、標準ライブラリの使用方法がプラットフォームによって異なる理由を誰かが明らかにすることができれば、それは大いに役立ちます。
私にはこれ以上スターウッドはありません!!

EDIT:完了するようにコードが更新されました。 myFile.txtの内容が更新されました。

+0

'のmyFileとは何ですか'?あなたはそれを定義していません。 otが 'inputStream'の場合、後者は引数なしで' open'を持ちません。 – Lol4t0

+0

@ Lol4t0コードが更新され、完了しました。また、デフォルトでは、モードはios_base :: inです。参照:http://www.cplusplus.com/reference/iostream/ifstream/open/ –

+0

@JerryCoffin:答えよりも、私はこれで噛まれてしまいました –

答えて

4

#include <string>を忘れている可能性があります。それがなければ、Microsoftのバージョン<iostream>(など)は、動作するためにはstd::stringの宣言が十分に含まれていますが、他の部分が欠落しているため、奇妙な、一見不可解なエラーが発生します。

欠けているものの1つは、オペレータのオーバーロードの大部分がstd::stringです。これはまさにあなたが見逃しているようです。

さておき、while (myfile.good()) ...はかなり保証バグであるとして - あなたはおそらくしたい:

while (myfile>>myString) 
    std::cout << myString << " \n"; 

はまた、あなたが標準アルゴリズムで仕事をすることができます:

#include <string> 
#include <algorithm> 
#include <iterator> 
#include <fstream> 
#include <iostream> 

int main() { 
    std::ifstream myfile("input.txt"); 

    std::copy(std::istream_iterator<std::string>(myfile), 
       std::istream_iterator<std::string>(), 
       std::ostream_iterator<std::string>(std::cout, " \n")); 
    return 0; 
} 
0

以下は、MSVC 2010年私のために罰金コンパイル:

std::ifstream inputStream; 
std::string myString; 
inputStream.open("myFile.txt", std::ifstream::in); 

while(inputStream.good()) 
{ 
    inputStream >> myString; 
}

:私のオープンモードとしてstd::ifstream::inを使用せずに、私はあなたと同じエラーを得ました。私はあなたがこのパラメータのために持っている値を確認することをお勧めします。

+0

filescope(宣言のみ)でステートメントを持つことができないので、クリップはコンパイルされないと確信しています。あなたと@Vinshnuは、関連するすべてのコードを提供していません。 –

+0

@LokiAstariコードが入力ファイルで更新されました。 –

+0

@Saulオープンメソッドのデフォルトは、ios_base :: inです。 http://www.cplusplus.com/reference/iostream/ifstream/open/ –

関連する問題