// 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。
我得到的错误是:
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;'
country.h:24:10:注意:std :: ostream&amp;运算符&lt;&lt;(std :: ostream&amp;,Country&amp;) country.h:24:10:注意:参数2从'GraphNameSpace :: vertexConnectivity'到'Country&amp;'没有已知的转换
由于
答案 0 :(得分:1)
*j
是vertexConnection<Type>
,但您从未在 如何将其表示为文本的情况下向编译器提供任何说明。您想将其流式传输到std::cout
:好的,但如何?根据什么规则和逻辑?
您需要编写一个stringise函数并调用它,或者为该类型重载operator<<
:
template <typename T>
std::ostream& operator<<(std::ostream& s, const vertexConnection<T>&);
目前,您的编译器指出您至少为Country
个对象提供了一个,但在这种情况下无法使用它。
答案 1 :(得分:0)
两件事。
使用基于范围的for循环(C ++ 11功能)来简化元素访问。 请参阅http://herbsutter.com/elements-of-modern-c-style/
提供重载运算符&lt;&lt;对于每个用户定义的类型。
例如,
std::ostream& operator<<(std::ostream& s, const Country& c);