嘗試執行以下操作時出現這些錯誤。 我有一個FileMgr類來處理一個輸入和輸出文件與兩個成員函數將輸入的每一行復制到列表中,並寫入列表的每個成員的輸出。注意:以下功能在由我的主人直接處理時可以正常工作!所以不要費心去試圖弄清楚我在使用複製函數做什麼,我花了很多時間弄清楚它們,現在它們工作正常,問題不在那裏。奇怪的iostream編譯錯誤
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工作?
編輯爲清晰。 – Edoz 2011-03-19 07:11:39
您的錯誤消息表明您正在對輸入變量進行錯誤操作,因此您可能也想要發佈該代碼。另請參閱下面的答案。如果我最終對此正確,您的問題可能需要一個新的標題:) – phooji 2011-03-19 08:40:18
找出哪一行會導致最後兩個錯誤,因爲這些錯誤似乎與您的'writeFileToList'函數無關。 – rve 2011-03-19 09:14:43