使用const参数错误的C ++ ostream运算符重载

时间:2013-04-01 22:09:14

标签: const overloading operator-keyword

我正在尝试将标准格式用于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,这可以正常工作,否则会产生上述错误。我没有为类定义赋值运算符,但我不清楚为什么它应该有所作为。

1 个答案:

答案 0 :(得分:0)

那是因为你试图使用非const迭代器迭代一个const对象。将j的声明更改为:

std::vector<owComponent>::const_iterator j;

或者只使用C ++ 11风格:

for (auto j : bus.owCompList) {