2013-05-02 164 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