我試圖寫一個C++ 11鏈表的實現,用鏈表是一個模板類和它的節點是一個嵌套類,如下所示:類模板聲明C++嵌套類
template <typename T>
class LinkedList {
public:
class Node;
std::shared_ptr<Node> listSearch(const T &input) const;
private:
std::shared_ptr<Node> head;
std::shared_ptr<Node> tail;
};
template <typename T>
class LinkedList<T>::Node {
private:
T data;
std::shared_ptr<Node> next;
}
我假設類Node本身不是一個模板,但是當LinkedList被實例化時,它也會創建Node類。
當我嘗試按以下方式定義listSearch函數時,出現錯誤:「模板類型參數的模板參數必須是類型;您是否忘記了'typename'?」。有人可以解釋什麼是錯的?
template <typename T>
std::shared_ptr<LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) { ... }
編輯:
好了,我重新編譯gcc和錯誤信息是清晰的。它需要以下內容:
std::shared_ptr<typename LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) const { ... }
爲什麼在LinkedList :: Node之前需要typename?這不是一個明顯的類型?
忘了'模板'? –
對不起,我的錯。模板存在,只是忘了添加它的問題。編輯OP。 –
JamesLens
我在我的答案中放了一個鏈接。 –