2017-05-04 14 views
0

ここでは、私が修正できないエラーを含むコードです。 テキストファイルを開くコードが間違っているようですが、何が間違っているのかを確認しようとしましたが、見つけられませんでした。私はこのコードで動作する同様のプログラムを持っていますが、このコードは動作しません。エラー:ifstream :: open(string)への呼び出しで一致する関数がありません

エラー: への呼び出し 'のstd :: basic_ifstream ::オープン(STD :: __ cxx11 ::文字列&')に該当する機能 FILE.open(ファイル名)< ---

#include <iostream> 
#include <fstream> 
#include <iomanip> 

using namespace std; 

#include "nameSort.h" 

size_t readNames(string filename, string surnames[], string firstnames[]) 
{ 
    //initialize size top 0 
    size_t SIZE = 0; 

    //open file for input 
    ifstream FILE; 
    FILE.open(filename);//(This is where the error is) 

    //check if file exists 
    if(!FILE) 
    { 
    cout << "Error! No such file!\n"; 
    return 0; 
    } 
    else 
    { 
     //read file data to arrays 
     while(!FILE.eof()) 
     { 
     FILE >> firstnames[SIZE] >> surnames[SIZE]; 
     SIZE++; 
     }//end while 
    }//end if 

    FILE.close(); 
    return size; 
} 
+1

少なくともC++ 11を有効にしてコンパイルしていますか? –

+0

変数の代わりにテキストファイル名を挿入すると動作しますが、なぜ変数でエラーが発生するのか誰かが知っていますか? –

+1

'FILE.open(filename.c_str());'を試してみましたが、C++ 11を有効にしてください。 – user463035818

答えて

0

オーバーロードstd::basic_ifstream::open(const std::string&)がC++ 11で追加されました。 C++のそれほど素晴らしい機能ではなく、多くの関数が引数としてc-stringsをとり、std::stringを使用するのが普通です。これは、そのオーバーロードを追加することによって、一部の機能でC++ 11で修正されました。

おそらくC++ 11は有効にしていません。ちょっと別の変わったこと... C++ 11がかなりの期間存在しているにもかかわらず、まだ-std=c++11フラグを付けてコンパイラに明示的に有効にする必要があります。

回避策としては、

FILE.open(filename.c_str()); 

を使用して、小文字の変数名を使用することを検討してくださいすることができます。すべての大文字の変数名は一般的に良い習慣とはみなされません。

関連する問題