Ik ben een stukkie aan het schrijven en ja ik weet dat er al een standaard vector is, maar daar gaat het niet om 
dit is de base class:
dit werkt wel:
en dit niet:
als ik dit compileer gaat het bij de eerste versie goed, maar bij de 2e krijg ik een enorme lijst:
wie weet wat de oorzaak is, of ziet wat ik fout doe.. ik denk zelf eigenlijk aan het feit dat ik bij het aangeven van de base opgeef welk type de template aan moet nemen, aangezien als ik een willekeurige andere class als base gebruik het wel goed gaat.
dit is de base class:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| template <typename T> class Vector
{
public:
explicit Vector(int s);
Vector(Vector<T>& v);
virtual ~Vector();
virtual Vector<T>& operator=(const Vector<T>& v);
virtual int extend();
// virtual bool is_empty();
virtual bool is_full();
private:
T** data;
int size;
int used;
}; |
dit werkt wel:
code:
1
2
3
4
5
6
7
8
| class RoomVector: public Vector<RoomData>
{
public:
explicit RoomVector(int s) {};
virtual ~RoomVector(){};
virtual void add(int) {}; //Hier bij de declaratie van add dus meteen met {}
private:
}; |
en dit niet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| class RoomVector: public Vector<RoomData>
{
public:
explicit RoomVector(int s) {};
virtual ~RoomVector(){};
virtual void add(int); //en hier dus niet, maar met losse declaratie in los cpp file.
private:
};
//en dit in een cpp file natuurlijk met nodige includes.
void RoomVector::add(int room_nr)
{
return;
} |
als ik dit compileer gaat het bij de eerste versie goed, maar bij de 2e krijg ik een enorme lijst:
code:
1
2
3
4
5
6
7
8
9
| RoomData.o(.gnu.linkonce.d._ZTV10RoomVector+0x10): undefined reference to `Vector<RoomData>::operator=(Vector<RoomData> const&)' RoomData.o(.gnu.linkonce.d._ZTV10RoomVector+0x14): undefined reference to `Vector<RoomData>::extend()' RoomData.o(.gnu.linkonce.d._ZTV10RoomVector+0x18): undefined reference to `Vector<RoomData>::is_full()' RoomData.o(.gnu.linkonce.t._ZN10RoomVectorD1Ev+0x16): In function `RoomVector::~RoomVector [in-charge]()': : undefined reference to `Vector<RoomData>::~Vector [not-in-charge]()' RoomData.o(.gnu.linkonce.t._ZN10RoomVectorD0Ev+0x16): In function `RoomVector::~RoomVector [in-charge deleting]()': : undefined reference to `Vector<RoomData>::~Vector [not-in-charge]()' collect2: ld returned 1 exit status make: *** [mesa_mud] Error 1 |
wie weet wat de oorzaak is, of ziet wat ik fout doe.. ik denk zelf eigenlijk aan het feit dat ik bij het aangeven van de base opgeef welk type de template aan moet nemen, aangezien als ik een willekeurige andere class als base gebruik het wel goed gaat.