2013-05-02 118 views
-1

我有以下编译器错误的源代码。它很明显,我正在尝试这样做,所以我不会尝试解释,除此之外,返回的node<N>*类型不是正确的类型,因为它是一个模板,并且与session*对象产生冲突。继承人错误。C++:从类中返回模板对象,模板类型不匹配?

linked_list_1.cpp|17|error: cannot convert 'node<session*>*' to 'session*' in assignment| 
+0

@JoachimPileborg它是否被分配在堆或在堆不应该有所作为。他正确地分配(虽然没有正确删除它)。 – 2013-05-02 05:43:25

回答

2

在第17行,你要的return_node的返回值分配给session*,但return_node的返回类型是Node<N>*Node<Session*>*),而不是一个Nsession*)。 添加一个访问器功能的节点类,并使用它来访问数据成员,e.g:

session* SESSION_COPY; 
SESSION_COPY = LIST->return_node(0)->getData(); 
+0

在节点类中添加一个函数'N getData(){return data; }'可以让你访问数据对象。 – 2013-05-02 05:38:27

+0

'N data;'成员存储指针。 N在你的情况下,是'session *'。顺便说一句,除非你是这样做的学习模板,使用'std :: list'或'std :: forward_list'。 – 2013-05-02 05:41:10

+0

您的push_back方法是否正常工作?这通常意味着您正在访问一个在内存中无效的对象(未分配或已被删除)。 – 2013-05-02 06:12:23

1

因为return_node函数返回node<N>*而不是N。或者N被替换为模板参数:return_node返回node<session*>*(请查看头文件),但您尝试将返回的指针分配给session*变量。就像错误信息很清楚说。

+0

@lost_with_coding如果'return_node'实际上应该是public的,那么你可能需要在'node'类中添加一个函数来返回包含的数据。然后你可以做例如'session * s = list.return_node(0) - > data();' – 2013-05-02 05:37:18