无法在赋值中将'clist <int> :: node *'转换为'clist <char> :: node *'</char> </int>

时间:2012-06-11 14:46:30

标签: c++ templates casting circular-list

这里我正在创建一个带有成员函数的circular linked list ( template <class t> class clist; )concat ()用于在另一个列表的末尾连接一个列表。问题在于这个功能。现在,当我使用相同的模板参数连接两个clist时(假设两者都是clist<int>),那么函数工作正常,但是一旦我尝试连接两个clists({{1}然后我需要在函数clist <int> c1中进行一些转换,因为我对模板知之甚少,所以我实际上想出了如何做到这一点。

所以问题恰恰在于下面程序的最后一行。我有clist <char> c2其成员函数concat被调用,而clist <int> c1正在c1结束时被连接。

concat

无论我尝试什么,它仍会显示错误clist <char> c2

有人可以告诉我这里投的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

演员实际上是在拯救你制作异类列表。你似乎要做的是连接两个列表 - 一个用int,一个用char。现在从概念上看,这似乎是合理的,但int节点和char节点的结构太不相同了。

唯一可行的方法是将第二个列表复制到一个int的clist然后连接。

答案 1 :(得分:0)

模板参数不是协变的,也不是逆变的; clist<int>clist<char>完全不同的类型。你无法在它们之间进行转换。由于node类型的定义包含在模板类型中,因此它也依赖于模板参数,相应的node类型也同样不同。

每个列表只能包含一种类型。如果您尝试编写可以包含任何类型的列表,则需要使用variant-style类型作为模板参数。