ここでは、あるリストを別のリストの最後に連結するために使用されるcircular linked list ( template <class t> class clist; )
メンバー関数を使用して を作成しています。concat ()
問題はこの関数にあります。clist
同じテンプレートパラメーターで2つを連結すると(両方とも )、関数は正常に機能しますが、2つ(and )をclist<int>
連結しようとするとすぐに、関数でキャストを行う必要があります。テンプレートについては、実際にその方法を理解していません。clists
clist <int> c1
clist <char> c2
concat
したがって、問題は正確には、以下のプログラムの最後の 2 行目にあります。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
。
ここでキャストする適切な方法を教えてください。