在我的班级InVal
中,我有一个方法和一个朋友运算符声明如下:
void Parse(std::istream& file) throw (int);
friend std::istream& operator >> (std::istream& is, const InVal& id3);
朋友运营商>>
代码是:
std::istream& operator >> (std::istream& is, const InVal& val) {
val.Parse(is);
return is;
}
在val.Parse(is)
行上,我的Invalid arguments
候选人提名为void Parse(std::basic_istream<char, std::char_traits<char>>&)
。在iosfwd
,我有
typedef basic_istream<char> istream
所以某些地方不匹配。为什么我会收到错误,我该如何解决?
答案 0 :(得分:2)
val
是const
引用,这意味着您只能在其上调用const
个成员函数。您需要将Parse
声明为const
成员函数,如下所示:
void Parse(std::istream& file) const throw (int);
这承诺编译器Parse
不会修改它被调用的InVal
对象。