2013-04-01 65 views
0

我想爲ostream運算符使用非成員函數重載的標準格式,但是當我有一個向量的內部賦值時它不會與const第二個參數一起使用迭代器。當使用const參數時,編譯器會給出以下錯誤:error:在j = bus.owAPI :: owBus :: owCompList.std :: vector中不匹配'operator ='...使用const參數錯誤的C++ ostream運算符重載

我的相關部分是類如下:

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迭代器遍歷const對象。的j聲明更改爲:

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

或者僅使用C++ 11的風格:

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

謝謝,我會努力讓迭代器常量,但我沒有做正確。 RTFM恐怕... – ppanish