2016-07-11 5 views
1

だから、これはコードです。 私は今...エラー:: getlineの

3 IntelliSense: no instance of overloaded function "getline" matches the argument list 
     argument types are: (const std::ifstream, std::string) 
Error 1 error C2665: 'std::getline' : none of the 2 overloads could convert all the argument types 

答えて

2

constを除去)するために、上記の変更その文脈。この機能を利用するには、機能署名を

void print_file(std::ifstream& dat_in) 

に変更するだけです。


ところで、関数名print_fileは、実際にファイルからの読み込み機能のためにかなり混乱しています。

1

問題は、あなたのコードはstd::getline()への最初のパラメータとしてconst ifstreamパラメータへの参照を渡しているもので、このコード行倍の千をしました。 std::getline()は入力ストリームパラメータを変更するので、最初のパラメータとしてconst参照を持つことはできません。

コンパイラからのエラーメッセージには、すべてのパラメータのリストが含まれており、最初のパラメータがconstの参照であることが示されているはずです。

2

問題は、必ずしもここに

void print_file(const ifstream& dat_in) 

getlineで渡されたとされるstreamを変更します。

もちろん
void print_file(const std::ifstream& dat_in) 
       // ^^^^^ 

そこからデータを読み出す際std::ifstreamの状態が変更され、従ってそれはでconstことができない。だから犯人はconstある

void print_file(ifstream& dat_in) 
0

経験則として、すべてのストリーム型を参照として渡し、戻り値もconstでも値渡しでも返しません。 constはオブジェクトを参照し、ファイルは参照しません。オブジェクトは、ファイルが読み取り専用ファイルであっても変更される可能性があります。