在这里,我正在制作一个circular linked list ( template <class t> class clist; )
成员函数,concat ()
用于将一个列表连接到另一个列表的末尾。问题出在这个函数上。现在,当我clist
用相同的模板参数连接两个(假设两者都是clist<int>
)时,函数可以正常工作,但是一旦我尝试连接两个clists
(clist <int> c1
和clist <char> c2
),那么我需要在函数中进行一些转换concat
,因为我不太了解关于模板,我真的不知道该怎么做。
所以问题恰恰出在下面程序的最后第二行。我有clist <int> c1
它的成员函数concat
被调用,并且clist <char> c2
在 c1 的末尾被连接起来。
template <class t>
class clist
{
struct node
{
t data;
node* next;
node (const t& x=0, node* nxt=0): data(x), next(nxt) { }
};
typedef node* NPTR;
public:
NPTR ptr;
template <class r>
void concat ( clist <r> & );
// other functions like push, pop etc. to form the clist
clist () : ptr(0) { }
};
template <class t>
template <class r>
void clist<t> :: concat ( clist <r>& c2 )
{
// ptr is pointer to a certain node in the list through which the list is
// accessedand is zero initially.
if ( c2.ptr == 0 ) return;
if ( ptr == 0 ) ptr = (NPTR) c2.ptr;
else
{
NPTR p = ptr->next;
ptr->next = (NPTR) c2.ptr->next;
c2.ptr->next = ( ??? ) p ;
ptr = (NPTR)c2.ptr;
}
无论我尝试什么,它仍然显示错误cannot convert 'clist<int>::node*' to 'clist<char>::node*' in assignment
。
有人可以告诉这里什么是正确的投射方式吗?