2013-04-01 2 views
0

Я пытаюсь использовать стандартный формат для перегрузки не-членной функции для оператора ostream, но он не будет работать со вторым аргументом const, когда у меня есть внутреннее назначение вектору итератор. Компилятор дает следующую ошибку при использовании аргумента const: ошибка: нет соответствия для 'operator =' в j = bus.owAPI :: owBus :: owCompList.std :: vector ...Перегрузка оператора C++ ostream с использованием ошибки const const

Соответствующие части моего Класс следующим образом:

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; 
} 

Это прекрасно работает, если соп удаляется из друга декларации и второго аргумента в описании функции, в противном случае это даст ошибка, описанная выше. У меня нет оператора присваивания, определенного для класса, но мне непонятно, почему это должно иметь значение.

ответ

0

Это потому, что вы пытаетесь использовать инертный итератор для итерации через объект const. Измените объявление о j на:

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

или просто использовать C++ 11 стиля:

for (auto j : bus.owCompList) { 
+0

Спасибо, я пытался сделать итератор сопзЬ, но я не делал это правильно , RTFM боюсь ... – ppanish