Я много раз искал этот вопрос и нашел много похожих вопросов, но мне не удалось найти решение. Я объявляю класс:
class File {
public:
string fileName;
std::ifstream & flinstream;
Password pass;
//Next block to look at
unsigned int nb;
unsigned int sectorsLeft;
File (string name,string passd);
File ( );
};
и соответствующая функция:
File::File (string name,string passd) {
fileName = name;
const char* cstr = name.c_str();
pass = Password(passd);
flinstream = std::ifstream(cstr);
if(!flinstream.good()) {
string err = "The file '";
err.append(name);
err.append("' could not be opened!");
callError(err,3);
}
}
во время компиляции я получаю следующие ошибки:
[0] => out.cpp: In constructor ‘File::File(std::string, std::string)’:
[1] => out.cpp:130:3: error: uninitialized reference member ‘File::flinstream’
[2] => In file included from /usr/include/c++/4.5/ios:39:0,
[3] => from /usr/include/c++/4.5/ostream:40,
[4] => from /usr/include/c++/4.5/iostream:40,
[5] => from out.cpp:1:
[6] => /usr/include/c++/4.5/bits/ios_base.h: In member function ‘std::basic_ios<char>& std::basic_ios<char>::operator=(const std::basic_ios<char>&)’:
[7] => /usr/include/c++/4.5/bits/ios_base.h:788:5: error: ‘std::ios_base& std::ios_base::operator=(const std::ios_base&)’ is private
[8] => /usr/include/c++/4.5/iosfwd:77:11: error: within this context
[9] => /usr/include/c++/4.5/iosfwd: In member function ‘std::basic_istream<char>& std::basic_istream<char>::operator=(const std::basic_istream<char>&)’:
[10] => /usr/include/c++/4.5/iosfwd:83:11: note: synthesized method ‘std::basic_ios<char>& std::basic_ios<char>::operator=(const std::basic_ios<char>&)’ first required here
[11] => /usr/include/c++/4.5/iosfwd: In member function ‘std::basic_ifstream<char>& std::basic_ifstream<char>::operator=(const std::basic_ifstream<char>&)’:
[12] => /usr/include/c++/4.5/iosfwd:111:11: note: synthesized method ‘std::basic_istream<char>& std::basic_istream<char>::operator=(const std::basic_istream<char>&)’ first required here
[13] => /usr/include/c++/4.5/streambuf: In member function ‘std::basic_filebuf<char>& std::basic_filebuf<char>::operator=(const std::basic_filebuf<char>&)’:
[14] => /usr/include/c++/4.5/streambuf:781:7: error: ‘std::basic_streambuf<_CharT, _Traits>::__streambuf_type& std::basic_streambuf<_CharT, _Traits>::operator=(const std::basic_streambuf<_CharT, _Traits>::__streambuf_type&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_streambuf<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>]’ is private
[15] => /usr/include/c++/4.5/iosfwd:108:11: error: within this context
[16] => /usr/include/c++/4.5/iosfwd: In member function ‘std::basic_ifstream<char>& std::basic_ifstream<char>::operator=(const std::basic_ifstream<char>&)’:
[17] => /usr/include/c++/4.5/iosfwd:111:11: note: synthesized method ‘std::basic_filebuf<char>& std::basic_filebuf<char>::operator=(const std::basic_filebuf<char>&)’ first required here
[18] => out.cpp: In constructor ‘File::File(std::string, std::string)’:
[19] => out.cpp:134:36: note: synthesized method ‘std::basic_ifstream<char>& std::basic_ifstream<char>::operator=(const std::basic_ifstream<char>&)’ first required here
[20] => out.cpp: In constructor ‘File::File()’:
[21] => out.cpp:142:3: error: uninitialized reference member ‘File::flinstream’
[22] => out.cpp: In member function ‘File& File::operator=(const File&)’:
[23] => out.cpp:51:12: error: non-static reference member ‘std::ifstream& File::flinstream’, can't use default assignment operator
[24] => out.cpp: In function ‘int main(int, char**)’:
[25] => out.cpp:166:57: note: synthesized method ‘File& File::operator=(const File&)’ first required here
)
Я понял, что ifstream
довольно специфично для задания и всего, но я понятия не имею, как включить его в класс. Заранее спасибо за помощь!
РЕДАКТИРОВАТЬ: я пробовал несколько перестановок вышеупомянутого класса, например, с использованием нормальной переменной:
std::ifstream flinstream;
Помимо использования предложенной функции open()
:
flinstream.open(cstr);
Однако ошибка остается прежней.