Я пытаюсь определить класс DS с объявлением в DS.h и реализацией в DS.cpp. Код очень маленький, поэтому вот список:
/*
* DS.h
*/
#ifndef DS_H_
#define DS_H_
#include "Node.h"
template<class T>
class DS
{
public:
static const int BST;
static const int SLL;
static const int DLL;
DS(const int);
~DS();
private:
int m_type;
Node<T> *head;
};
#endif /* DS_H_ */
И,
/*
* DS.cpp
*/
#include "DS.h"
template<class T> const int DS<T>::BST = 0;
template<class T> const int DS<T>::SLL = 1;
template<class T> const int DS<T>::DLL = 2;
template<class T>
DS<T>::DS(const int type) :
m_type(type), head(0)
{
}
template<class T>
DS<T>::~DS()
{
}
Основная программа:
#include "DS.h"
int main()
{
DS<int> *sll1 = new DS<int> (DS<int>::SLL);
delete sll1;
return 0;
}
Когда я пытаюсь скомпилировать эту программу, я получаю следующую ошибку:
g++ -O2 -g -Wall -Wextra -Weffc++ -fmessage-length=0 -c -o Node.o Node.cpp
g++ -O2 -g -Wall -Wextra -Weffc++ -fmessage-length=0 -c -o DS.o DS.cpp
g++ -O2 -g -Wall -Wextra -Weffc++ -fmessage-length=0 -c -o main.o main.cpp
DS.h: In instantiation of ?DS<int>?:
main.cpp:13: instantiated from here
DS.h:15: warning: ?class DS<int>? has pointer data members
DS.h:15: warning: but does not override ?DS<int>(const DS<int>&)?
DS.h:15: warning: or ?operator=(const DS<int>&)?
g++ -o ds.exe Node.o DS.o main.o
main.o: In function `main':
/cygdrive/c/Documents and Settings/ansrivastava/My Documents/src/ds/main.cpp:13: undefined reference to `DS<int>::SLL'
/cygdrive/c/Documents and Settings/ansrivastava/My Documents/src/ds/main.cpp:13: undefined reference to `DS<int>::DS(int)'
/cygdrive/c/Documents and Settings/ansrivastava/My Documents/src/ds/main.cpp:14: undefined reference to `DS<int>::~DS()'
collect2: ld returned 1 exit status
make: *** [ds.exe] Error 1
Теперь, если я удалю весь кодиз DS.cpp и вставьте его в DS.h, все прекрасно скомпилируется.Есть идеи, что я делаю не так?