我有以下编译器错误的源代码。它很明显,我正在尝试这样做,所以我不会尝试解释,除此之外,返回的node<N>*
类型不是正确的类型,因为它是一个模板,并且与session*
对象产生冲突。继承人错误。C++:从类中返回模板对象,模板类型不匹配?
linked_list_1.cpp|17|error: cannot convert 'node<session*>*' to 'session*' in assignment|
我有以下编译器错误的源代码。它很明显,我正在尝试这样做,所以我不会尝试解释,除此之外,返回的node<N>*
类型不是正确的类型,因为它是一个模板,并且与session*
对象产生冲突。继承人错误。C++:从类中返回模板对象,模板类型不匹配?
linked_list_1.cpp|17|error: cannot convert 'node<session*>*' to 'session*' in assignment|
在第17行,你要的return_node
的返回值分配给session*
,但return_node
的返回类型是Node<N>*
(Node<Session*>*
),而不是一个N
(session*
)。 添加一个访问器功能的节点类,并使用它来访问数据成员,e.g:
session* SESSION_COPY;
SESSION_COPY = LIST->return_node(0)->getData();
在节点类中添加一个函数'N getData(){return data; }'可以让你访问数据对象。 – 2013-05-02 05:38:27
'N data;'成员存储指针。 N在你的情况下,是'session *'。顺便说一句,除非你是这样做的学习模板,使用'std :: list'或'std :: forward_list'。 – 2013-05-02 05:41:10
您的push_back方法是否正常工作?这通常意味着您正在访问一个在内存中无效的对象(未分配或已被删除)。 – 2013-05-02 06:12:23
因为return_node
函数返回node<N>*
而不是N
。或者N
被替换为模板参数:return_node
返回node<session*>*
(请查看头文件),但您尝试将返回的指针分配给session*
变量。就像错误信息很清楚说。
@lost_with_coding如果'return_node'实际上应该是public的,那么你可能需要在'node'类中添加一个函数来返回包含的数据。然后你可以做例如'session * s = list.return_node(0) - > data();' – 2013-05-02 05:37:18
@JoachimPileborg它是否被分配在堆或在堆不应该有所作为。他正确地分配(虽然没有正确删除它)。 – 2013-05-02 05:43:25