2016-01-27 4 views
1

У меня есть код в следующем виде:Неполного Типа вложенного класса

class Trie{ 
public: 
    Trie() : root(new TrieNode()){ }; 

    // Inserts a word into the trie. 
    void insert(std::string word); 

    // Returns if the word is in the trie. 
    bool search(std::string word); 

    // Returns if there is any word in the trie 
    // that starts with the given prefix. 
    bool startsWith(std::string prefix); 

private: 
    class TrieNode; 
    std::unique_ptr<TrieNode> root; 
}; 

class Trie::TrieNode{ 
public: 
    TrieNode() : eow(false){ }; 

    TrieNode* appendChar(char tar); 

    void end(); 

    bool isEnd(); 

    TrieNode* getChar(char tar); 

    int getInd(char tar); 

private: 
    std::array<std::unique_ptr<TrieNode>, 26> data; 
    bool eow;      // End of word 
}; 

Однако в третьей строке, Trie(): root(new TrieNode()), компилятор по-прежнему жалуется, что TrieNode является неполным. Как я могу это исправить?

Спасибо!

+0

Попробуйте определить класс TrieNode внутри класса Trie – Jytug

+0

У вас не может быть 'new TrieNode' в точке, где' TrieNode' является неполным. –

ответ

3

Определить конструктор Trie «s после TrieNode определения

class Trie::TrieNode{...} 

// must be AFTTER the class Trie is fully defined 
Trie::Trie() : root(new TrieNode()){ }; 

иначе конструктор Trie необходимо полное определение TrieNode, так как он должен построить новый объект, следовательно, ваша ошибка.

Смежные вопросы