打印结构中包含的列表

时间:2014-10-30 07:21:05

标签: c++11 graph

// 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类型的列表邻接中的内容,另一方面,类型为Type。

我得到的错误是:

  1. cout&lt;&lt; * j;
  2. graph.h:313:2:错误:'std :: cout&lt;&lt;'中的'运算符&lt;&lt;'不匹配j.std :: _ List_iterator&lt; _Tp&gt; :: operator * with _Tp = GraphNameSpace :: vertexConnectivity,std :: _ List_iterator&lt; _Tp&gt; :: reference = GraphNameSpace :: vertexConnectivity&amp;'

    1. 行是 ostream&amp;运营商&lt;(&ostream&amp;,Country&amp;);
    2. country.h:24:10:注意:std :: ostream&amp;运算符&lt;&lt;(std :: ostream&amp;,Country&amp;) country.h:24:10:注意:参数2从'GraphNameSpace :: vertexConnectivity'到'Country&amp;'没有已知的转换

      由于

2 个答案:

答案 0 :(得分:1)

*jvertexConnection<Type>,但您从未在 如何将其表示为文本的情况下向编译器提供任何说明。您想将其流式传输到std::cout:好的,但如何?根据什么规则和逻辑?

您需要编写一个stringise函数并调用它,或者为该类型重载operator<<

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

目前,您的编译器指出您至少为Country个对象提供了一个,但在这种情况下无法使用它。

答案 1 :(得分:0)

两件事。

  1. 使用基于范围的for循环(C ++ 11功能)来简化元素访问。 请参阅http://herbsutter.com/elements-of-modern-c-style/

  2. 提供重载运算符&lt;&lt;对于每个用户定义的类型。

  3. 例如,

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