2014-10-30 110 views
0
// struct representing every edge in the graph 
template<class Type> 
struct Vertex 
{ 
    Type info; 
    list<vertexConnection<Type> >adjacents; 
}; 

包含在列表這是我嘗試打印,但我得到的錯誤打印在一個結構

for(int i=0; i <count; i++) 
{ 
    typename list<vertexConnectivity<Type> >::iterator j; 

    list<vertexConnection<Type> > s = node[i].adjacents; 

    for(j = s.begin(); j != s.end(); ++j) 
    { 
    cout << *j; 
    } 
} 

如何打印列表中的鄰道其內容上的類型vertexConnection的另一隻手是類型。

我得到的錯誤是:

  1. 在與COUT < < * j中的線;

graph.h:313:2:錯誤:在「STD敵不過 '運算< <' ::法院< < j.std :: _ List_iterator < _TP> ::運算符*與_TP = GraphNameSpace :: vertexConnectivity,性病:: _ List_iterator < _TP> ::參考= GraphNameSpace :: vertexConnectivity &'

  • 線是ostream的&操作者< <(ostream的&,鄉村&);
  • country.h:24:10:注意:標準:: ostream的&操作者< <(標準:: ostream的&,國家&) country.h:24:10:注:沒有已知的轉換用於論據2從 'GraphNameSpace :: vertexConnectivity' 到 '國家&'

    感謝

    回答

    0

    *jvertexConnection<Type>但你永遠不提供到你的編譯器的任何指示如何表示,作爲文本。你想流到std::cout:好吧,但如何?根據什麼規則和邏輯?

    你需要寫一個函數stringise並調用它,或過載operator<<爲該類型:

    template <typename T> 
    std::ostream& operator<<(std::ostream& s, const vertexConnection<T>&); 
    

    在你的編譯器是指出你是至少提供一個Country對象的時候,但在這種情況下不能使用它。

    +0

    謝謝,我明白了。 – 2014-11-06 00:55:06

    0

    兩件事情。

    1. 使用基於範圍的循環(C++ 11功能)來簡化元素訪問。 請參閱http://herbsutter.com/elements-of-modern-c-style/

    2. 爲您的每個用戶定義類型提供重載運算符< <。

    例如,

    std::ostream& operator<<(std::ostream& s, const Country& c); 
    
    +0

    謝謝,我明白了。 – 2014-11-06 00:55:35