我正在尝试将标准格式用于ostream运算符的非成员函数重载,但是当我对向量迭代器进行内部赋值时,它将无法使用const第二个参数。当使用const参数时,编译器会给出以下错误:error:在j = bus.owAPI :: owBus :: owCompList.std :: vector ...
中,'operator ='不匹配我班级的相关部分如下:
class owBus{
public:
std::vector<owComponent> owCompList; //unsorted complete list
friend std::ostream&
operator<<(std::ostream& os, const owBus& bus );
};
使用非成员函数:
std::ostream& operator<<(std::ostream& os, const owBus& bus ) {
//iterate through component vector
std::vector<owComponent>::iterator j;
for(j=bus.owCompList.begin(); j!=bus.owCompList.end(); j++) {
/*
os << (*j).getComponentID() << ": ";
os << (*j).getComponentType() << std::endl;
*/
}
return os;
}
如果从友元声明和函数描述中的第二个参数中删除const,这可以正常工作,否则会产生上述错误。我没有为类定义赋值运算符,但我不清楚为什么它应该有所作为。
答案 0 :(得分:0)
那是因为你试图使用非const迭代器迭代一个const对象。将j
的声明更改为:
std::vector<owComponent>::const_iterator j;
或者只使用C ++ 11风格:
for (auto j : bus.owCompList) {