Я пытаюсь использовать стандартный формат для перегрузки не-членной функции для оператора 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;
}
Это прекрасно работает, если соп удаляется из друга декларации и второго аргумента в описании функции, в противном случае это даст ошибка, описанная выше. У меня нет оператора присваивания, определенного для класса, но мне непонятно, почему это должно иметь значение.
Спасибо, я пытался сделать итератор сопзЬ, но я не делал это правильно , RTFM боюсь ... – ppanish