尝试执行以下操作时出现这些错误。 我有一个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