我有一个fstream的对象在我的课像这样(只是一个例子)宣称:使用fstream的对象
class Asd {
public:
Asd();
private:
std::fstream stream;
};
现在,当调用构造函数我想指定的fstream参数,这样
Asd::Asd() {
this->stream = std::fstream(file, std::fstream::in);
}
然后在我有的所有类函数中使用该流,但它不起作用。一个错误VS是给我的是:
no accessible path to private member declared in virtual base 'std::basic_ios<_Elem,_Traits>'
所以我对阅读了所有我能找到的是,我不能(或者说:不应该)复制流,事实上,我甚至不想要这样做。有人说,一个可以将其添加到构造函数:
Asd::Asd() : stream(file, std::fstream::in) {
...
}
,但它打印同样的错误,我不知道该怎么办......还有别人说我引用的对象,但我不知识??我只是希望这个工作,但我无法弄清楚:(
编辑:这是完全错误信息
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> ]
文件是一个std :: string,但即使我把一个char const *放入它中,初始化程序也会输出相同的错误。而@Manu343726我应该总是喜欢在构造函数体外构建还是只在这种情况下构建?我觉得它有点尴尬,习惯于把所有的任务放在构造函数里^^但是这并不是很多,因为我是一个初学者 –
我认为你应该更喜欢所有情况下的初始化列表。我当然会这样做,而且我的大部分构造函数最终都是空的。 –
我认为错误信息与问题中的代码无关,除了你有一个'fstream'成员的类。 –