我真的需要你的帮助,我希望我能得到一些关于编译错误的线索。
我的代码有问题:
char user_ch;
do {
user_ch=_getch(); // i changed it from getch() to fix the previous error, didn't help it seems
switch (user_ch) {
case '1': response='1'; break;
case '3': response='3';
}
} while (response!='1'||response!='3');
编译器错误(特别是'构建'错误而不是' debug'错误):
error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
编译器引用fstream文件中的这段代码:
private:
_Myfb _Filebuffer; // the file buffer
};
有人指出我发布了我对fstream函数和对象的使用。 我的函数解析settings.txt文件
bool read_bool(ifstream file, int verse) {
string temp_var;
for (int i=0; i<verse; i++)
getline(file, temp_var);
if (temp_var=="true") return true;
else return false; }
int read_int(ifstream file, int verse) {
string temp_var;
for (int i=0; i<verse; i++)
getline(file, temp_var);
return stoi(temp_var); }
t_direction read_t_dir(ifstream file, int verse) {
char temp_var;
for (int i=0; i<verse; i++)
file.get(temp_var);
t_direction pre_return;
switch (temp_var) {
case '1': pre_return=to_mother; break;
case '2': pre_return=to_foreign; break;
case '3': pre_return=rndom;
}
return pre_return; }
string read_string(ifstream file, int verse) {
string temp_var;
for (int i=0; i<verse; i++)
getline(file, temp_var);
return temp_var; }
size_t lines_count(ifstream if_file) {
size_t a=0;
string temp_str;
while (getline(if_file, temp_str))
++a;
return a; }
bool add_mistake(ofstream file, string mistake, string to_trans, string target) {
file << "Original: " << to_trans << "\nShould be: " << target;
file << "\nYour response: " << mistake;
file << "\n---------------------\n";
return true; }
出于错误安全的考虑,我从未打开或关闭函数内的fstream对象。
// stream from file and tokenize
// SYNTAX FOR FILE (each line): word,word>word,word,word
words_input.open(FILE_NAME);
string buffer_line, token;
for (size_t i; i<number_of_lines; i++) {
getline(words_input, buffer_line);
istringstream language_split(buffer_line);
vector<string> container(2);
while (getline(language_split, token, '>')) // split languages
container.push_back(token); // hard coded to ignore possible elements 3, 4, 5...
istringstream synonym_source_split(container.at(0));
while (getline(synonym_source_split, token, ',')) // first language synonyms
source_words[i].push_back(token);
istringstream synonym_target_split(container.at(1));
while (getline(synonym_target_split, token, ',')) // second language synonyms
target_words[i].push_back(token);
}
words_input.close();
感谢您的帮助!
答案 0 :(得分:0)
您的问题出在代码的这一部分:
string read_string(ifstream file, int verse) {
string temp_var;
for (int i=0; i<verse; i++)
getline(file, temp_var);
return temp_var;
}
size_t lines_count(ifstream if_file) {
size_t a=0;
string temp_str;
while (getline(if_file, temp_str))
++a;
return a;
}
这两个函数都将ifstream
类型的参数作为输入。由于您未通过引用接收ifstream
,因此当您调用此函数时,C ++会尝试将if_file
初始化为您传入的ifstream
副本参数。这是不允许的,因为ifstream
无法被复制。不幸的是,您倾向于收到垃圾错误消息,例如您在上面显示的消息,而不是在这种情况下更有用的消息。
要解决此问题,请更改代码,以便通过引用获取参数:
string read_string(ifstream& file, int verse) {
string temp_var;
for (int i=0; i<verse; i++)
getline(file, temp_var);
return temp_var;
}
size_t lines_count(ifstream& if_file) {
size_t a=0;
string temp_str;
while (getline(if_file, temp_str))
++a;
return a;
}
也就是说,代码中可能存在其他错误。我强烈建议您逐步评论代码并逐步测试代码,因为编写代码非常难以理解。