我有以下編譯器錯誤的源代碼。它很明顯,我正在嘗試這樣做,所以我不會嘗試解釋,除此之外,返回的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