2013-03-02 2 views
1

Я смотрел на некоторые вопросы отвечал здесь, но я до сих пор не могу найти проблему ж/этот код:ошибка в реализации шаблона (Вложенный класс)

template <typename ItemType> 
class List 
{ 
    public: 
    List(); 
    private: 
    template <typename ItemType> 
    struct Node 
    { 
     ItemType m_value; 
     int  m_count; 
     Node* m_next; 
     Node* m_prev; 
    }; 
    Node* m_head; 
    int m_uniqueSize; 
    int m_size; 
    Node* find(const ItemType& value) const; 
}; 

затем в файле CPP, я заявляю, функция поиска выглядит следующим образом:

template <typename ItemType> 
typename Multiset<ItemType>::Node* Multiset<ItemType>::find(const ItemType& value) const 
{ 
    //linear search code in here 
} 

Есть ли что-то не так с моим кодом? ТНХ

+1

Вы не можете поместить определение функции члена шаблона класса в файлы '.cpp' –

+0

, поэтому я должен поместить все в заголовочный файл ? –

+1

В принципе, определение функций-членов шаблона должно быть видимым компилятору в том месте, где они были созданы. Обычно это достигается путем размещения этих определений в том же заголовке, который содержит определение шаблона класса. –

ответ

2

Проблема заключается в том, что вы вставляете шаблон код реализации внутри .cpp файла: все шаблоны код должен быть в заголовке файлов (вы можете захотеть поместить код интерфейса в коде MyClass.h файла и реализации в MyClass-inl.h файле, но оба должны быть заголовочными файлами).

Кроме того, Вы писали Multiset в вашем «.cpp» кода, но я думаю, вы должны использовать List вместо Multiset, в соответствии с вашим первым „заголовок“ код (название класса List).

0

И только немного уточнить, почему это происходит с шаблонами, считайте, что они оцениваются во время компиляции. Таким образом, их тип должен быть известен до того, как компоновщик начнет работать, подобно встроенным функциям, typedefs и т. Д.

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