При реализации шаблонов у меня возникают проблемы «сопоставления определений функций с существующими объявлениями»

0

Я чувствую, что беру сумасшедшие таблетки. Синтаксис - это то, что я использовал ранее (взятый из классов классов из моего класса) и не имел никаких проблем. Единственное различие заключается в том, что я использую Visual Studio 2013 сейчас. Я продолжаю получать эту ошибку, когда пытаюсь построить мое решение (это происходит для всех методов, так что я должен иметь какой-то синтаксис неправильно?)...

error C2244: 'node<T>::getItem' : unable to match function definition to an existing declaration
1>          c:\users\milan\documents\visual studio 2013\projects\threadedbst\threadedbst\node.h(19) : see declaration of 'node<T>::getItem'
1>          definition
1>          'T node::getItem(void)'
1>          existing declarations
1>          'T node<T>::getItem(void)'

Вот простой класс узлов, который я делал с использованием шаблона.

using namespace std;

//---------------------------------------------------------------------------
// node<T> class: 
//   -- 
//
// Assumptions:
//   -- <T> maintains it own comparable functionality
//---------------------------------------------------------------------------

template <typename T>
class node {

public:
    node(T* value); //constructor
    node(const node<T>&); //copy constructor
    void setFrequency(int); //sets the frequency
    int getFrequency(); //returns the frequency
    T* getItem(); //returns the item

private:
    T* item;
    int frequency;
    node<T>* leftChild;
    node<T>* rightChild;
    bool leftChildThread;
    bool rightChildThread;
};

//-------------------------- Constructor ------------------------------------
template <typename T>
node<T>::node(T* value) {
    item = value;
    frequency = 1;

}

//-------------------------- Copy ------------------------------------
template <typename T>
node<T>::node(const node<T>& copyThis) {
    item = copyThis.value;
    frequency = copyThis.frequency;
}

//-------------------------- setFrequency ------------------------------------
template <typename T>
void node<T>::setFrequency(int num) {
    frequency = num;
}

//-------------------------- getFrequency ------------------------------------
template <typename T>
int node<T>::getFrequency() {
    return frequency;
}

//-------------------------- getItem ------------------------------------
template <typename T>
T* node<T>::getItem() {
    return item;
}
  • 3
    node leftChild; node rightChild; как это может работать?
  • 0
    Он отлично работает для меня под VS 2012. Однако я замечаю, что вы не указываете тип узла, когда используете его (вероятно, это должен быть node<T> вместо node )
Показать ещё 11 комментариев
Теги:
templates

1 ответ

1

C++ не разрешает тип самонастройки, вам нужно использовать указатель

template <typename T>
class node {
    .... 
    node<T>* leftChild;  //pointer
    node<T>* rightChild;
    ...
};

смотреть живую пробную версию

  • 0
    Спасибо, это было просто то, что я пропустил, когда набирал это. Не влияет на мои ошибки.
  • 0
    Вы показываете реальный код тогда?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню