ostream 演算子の非メンバー関数のオーバーロードに標準形式を使用しようとしていますが、ベクトル反復子への内部割り当てがある場合、const の 2 番目の引数では機能しません。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;
}
const がフレンド宣言と関数記述の 2 番目の引数から削除されている場合、これは正常に機能します。それ以外の場合は、上記のエラーが発生します。クラスに定義された代入演算子はありませんが、それが違いを生む理由は明らかではありません。