2017-12-10 9 views
-1

ファイルを読み込んで構造体に配置するコードを記述しようとしています。しかし、私は私のコードを実行すると、それは私に異常なエラーを与え、私は何か間違ったコードを見ることができません。'ifstream'の初期化に一致するコンストラクタがありません

のstruct地図 {

int x; 
int y; 
char symbol; 
int id; 
string fullname; 
bool visited; 
}; 

void locationFile(ifstream filename, vector<Map> &vmap, int rows, int 
col) 

{ 
Map map; 

while (filename >> map.x >> map.y >> map.symbol >> map.id) 
{ 
    if (map.x> rows || map.x< 1 || map.y> col || map.y<1) 
    { 
     cout << map.id << " out of range - ignoring" << endl; 
     map.visited = true; 
    } 
    else 
    { 
     vmap.push_back(map); 
    } 
} 
} 

void namesFile(ifstream names, vector<Map>& vmap) 
{ 
Map map; 

while(names >> map.id>> map.symbol) 
{ 
    vmap.push_back(map); 
} 
} 

int main() 
{ 
vector<Map> info; 
string location; 
string names; 
getFilenames(location, names); 

//open files 
ifstream inL; 
inL.open(location.c_str()); 

string journey= "journey.txt"; 
ofstream fout(journey.c_str()); 

int rows, col, sx, sy, ex, ey; 
inL >> rows >> col >> sx >> sy >> ex >> ey; 

locationFile(inL, info, rows, col); 

inL.close(); 

ifstream inN; 
inN.open(names.c_str()); 
namesFile(inN, info); 
inN.close(); 



vector< vector<string> > grid; 
grid= createGrid(info, rows, col, sx, sy, ex, ey); 

//print out grid 
for(int h=0; h< grid.size(); h++) 
{ 
    for(int g=0; g<grid.size(); g++) 
     { 
      fout << grid[h][g]; 
     } 
} 

結果ショーは、情報から作成されたグリッドは、ファイル/

から読み込むこと) ^ /ライブラリ/開発/ CommandLineToolsは/ usr// C++インクルード/ v1/ios:313:5:注:ここでは はプライベートであると宣言されました ios_base(const ios_base&); // =削除; ^ /ライブラリ/開発/ CommandLineToolsは/ usr /含める/ C++/V1/iosfwd:32:131注意:用 暗黙のコピーコンストラクタ "のstd ::の__ 1 :: basic_ios初 ここ クラス_LIBCPP_TEMPLATE_VISのbasic_ifstreamが必要。 - >
+2

'ifstream'はコピーできません。値渡しできません。代わりに参照渡し。 –

+1

'ifstream'を値で関数に渡そうとしています。その関数がコピーされます。このような操作(ストリームオブジェクトのコピー)は許可されません。代わりに参照渡し。 –

+0

https://stackoverflow.com/questions/36051672/why-are-iostreams-not-copyable –

答えて

0
void locationFile(ifstream filename, vector<Map> &vmap, int rows, int col) 

void namesFile(ifstream names, vector<Map>& vmap) 

これら2つの関数は、値によってifstreamをとります。変数を渡すには、変数をコピーする必要があります。しかし、ifstream's copy constructor is deleted

関連する問題