Я получаю эти ошибки при попытке сделать следующее.
У меня есть класс FileMgr для обработки входного и выходного файла с двумя функциями-членами, чтобы скопировать каждую строку ввода в список и записать в вывод каждого члена списка. примечание: следующие функции работают должным образом, когда обрабатываются непосредственно моим main! так что не пытайтесь разобраться, что я делаю с функциями копирования, я потратил много времени на их выяснение, и теперь они работают нормально, проблема не в этом.
FileMgr::FileMgr(string inFilename, string outFilename)
{
input.open(inFilename);
output.open(outFilename);
}
bool FileMgr::writeFileToList(list<string> &l)
{
// copy each line of file into new member of list<string>
if(!input.is_open())
return false;
copy(istream_iterator<string>(input), istream_iterator<string>(), back_inserter(l));
return true;
}
bool FileMgr::writeListToFile(list<string>::iterator begin, list<string>::iterator end)
{
// copy each member of list<string> in output file, beginning and ending at iterators begin, end
// note that I have to pass a "false" end iterator, that is, end--, for it to work
if(!output.is_open())
return false;
copy(begin, end, ostream_iterator<string>(output, "\n"));
return true;
}
и до сих пор все в порядке. затем мой другой класс, который получает список из FileMgr, и он должен позволить пользователю редактировать его (я еще не там из-за этих ошибок), так что вот часть моего объявления:
class Dictionary
{
public:
Dictionary(string inFileName = "dictionary.txt", string outFileName = "output.txt");
void userEditor();
//private:
list<string> dictionary;
FileMgr manager;
bool findWord(string word);
bool addWord(string word);
bool deleteWord(string word);
void sortAndFix();
void saveAndExit();
и вот мои определения до сих пор, которые в основном являются просто конструктором:
Dictionary::Dictionary(string inFileName, string outFileName)
{
// open files and copy to list; sort and fix list.
manager = FileMgr(inFileName, outFileName);
dictionary.push_back(" ");
if( manager.writeFileToList(dictionary) )
cout << "File successfully read from " << inFileName << endl;
else
cout << "Error in reading " << inFileName << endl;
sortAndFix();
}
при компиляции я получаю эти ошибки где-то неизвестно в только что показанном конструкторе (потому что это единственный код в файле, из которого я получаю эти ошибки при компиляции):
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(860): error
C2249: 'std::basic_ios<_Elem,_Traits>::operator =' : no accessible path to private member declared in virtual base 'std::basic_ios<_Elem,_Traits>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\ios(177) : see declaration of 'std::basic_ios<_Elem,_Traits>::operator ='
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> This diagnostic occurred in the compiler generated function 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator =(const std::basic_istream<_Elem,_Traits> &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream(604): error C2249: 'std::basic_ios<_Elem,_Traits>::operator =' : no accessible path to private member declared in virtual base 'std::basic_ios<_Elem,_Traits>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\ios(177) : see declaration of 'std::basic_ios<_Elem,_Traits>::operator ='
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> This diagnostic occurred in the compiler generated function 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator =(const std::basic_ostream<_Elem,_Traits> &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
Я не могу понять, что не так. мой FileMgr работает нормально при тестировании с моего основного, так почему компилятор так отключается при работе с FileMgr из другого класса ??