Я чувствую, что беру сумасшедшие таблетки. Синтаксис - это то, что я использовал ранее (взятый из классов классов из моего класса) и не имел никаких проблем. Единственное различие заключается в том, что я использую 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;
}
C++ не разрешает тип самонастройки, вам нужно использовать указатель
template <typename T>
class node {
....
node<T>* leftChild; //pointer
node<T>* rightChild;
...
};
смотреть живую пробную версию
node leftChild; node rightChild;
как это может работать?node<T>
вместоnode
)