D
dr.krabbe
Jungspund
Hallo! Ich bin neu im c++-programmieren und lerne (immer noch) nach einem Buch. Ich habe eine Datei, mit einer main und eine .gcc und .h gleichen Namens. Und es geht irgendwie nicht.
So sieht die test_queue.cpp aus:
#include <iostream>
#include "tqueue.h"
using namespace std;
int main(void)
{
cout << "START!!"<<endl;
TQueue<int> tq1(9);
return(0);
}
so die tqueue.h:
#ifndef __TQUEUE_H
#define __TQUEUE_H
template<class Typ>
class TQueue
{
public:
explicit TQueue(unsigned long);
~TQueue(void);
bool Enqueue(Typ);
Typ Dequeue(void);
bool isEmpty(void);
private:
Typ *data;
unsigned long anz;
unsigned long maxanz;
unsigned long inpos, outpos;
};
#endif __TQUEUE_H
und so die tqueue.cpp:
#include "tqueue.h"
template<class Typ>
TQueue<Typ>::TQueue(unsigned long s)
{
data = new(Typ);
if(data)
{
anz=inpos=outpos=0;
maxanz = s;
}
else
{
anz=inpos=outpos=0;
}
}
template<class Typ>
TQueue<Typ>::~TQueue(void)
{
if(data)
delete[](data);
}
template<class Typ>
bool TQueue<Typ>::Enqueue(Typ w)
{
if(anz<maxanz)
{
anz++;
data[inpos++]=w;
if(inpos == maxanz)
inpos = 0;
return(true);
}
else
{
return(false);
}
}
template<class Typ>
Typ TQueue<Typ>:equeue(void)
{
if(anz > 0)
{
unsigned long aktpos = outpos;
if((++outpos) == maxanz)
outpos=0;
anz--;
return(data[aktpos]);
}
else
{
return(0);
}
}
template<class Typ>
bool TQueue<Typ>::isEmpty(void)
{
return(anz == 0);
}
und so ist beim aufruf von g++ die Fehlermeldung:
g++ test_queue.cpp
In Datei, eingefügt von test_queue.cpp:2:
tqueue.h:20:8: Warnung: mehrere Token am Ende der Direktive #endif
/tmp/cct0FJqL.o(.text+0x43): In function `main':
: undefined reference to `TQueue<int>::TQueue[in-charge](unsigned long)'
/tmp/cct0FJqL.o(.text+0x4e): In function `main':
: undefined reference to `TQueue<int>::~TQueue [in-charge]()'
collect2: ld returned 1 exit status
Wäre toll, wenn ihr mir sagt, woran das liegt.
Danke schon mal...
So sieht die test_queue.cpp aus:
#include <iostream>
#include "tqueue.h"
using namespace std;
int main(void)
{
cout << "START!!"<<endl;
TQueue<int> tq1(9);
return(0);
}
so die tqueue.h:
#ifndef __TQUEUE_H
#define __TQUEUE_H
template<class Typ>
class TQueue
{
public:
explicit TQueue(unsigned long);
~TQueue(void);
bool Enqueue(Typ);
Typ Dequeue(void);
bool isEmpty(void);
private:
Typ *data;
unsigned long anz;
unsigned long maxanz;
unsigned long inpos, outpos;
};
#endif __TQUEUE_H
und so die tqueue.cpp:
#include "tqueue.h"
template<class Typ>
TQueue<Typ>::TQueue(unsigned long s)
{
data = new(Typ
if(data)
{
anz=inpos=outpos=0;
maxanz = s;
}
else
{
anz=inpos=outpos=0;
}
}
template<class Typ>
TQueue<Typ>::~TQueue(void)
{
if(data)
delete[](data);
}
template<class Typ>
bool TQueue<Typ>::Enqueue(Typ w)
{
if(anz<maxanz)
{
anz++;
data[inpos++]=w;
if(inpos == maxanz)
inpos = 0;
return(true);
}
else
{
return(false);
}
}
template<class Typ>
Typ TQueue<Typ>:equeue(void)
{
if(anz > 0)
{
unsigned long aktpos = outpos;
if((++outpos) == maxanz)
outpos=0;
anz--;
return(data[aktpos]);
}
else
{
return(0);
}
}
template<class Typ>
bool TQueue<Typ>::isEmpty(void)
{
return(anz == 0);
}
und so ist beim aufruf von g++ die Fehlermeldung:
g++ test_queue.cpp
In Datei, eingefügt von test_queue.cpp:2:
tqueue.h:20:8: Warnung: mehrere Token am Ende der Direktive #endif
/tmp/cct0FJqL.o(.text+0x43): In function `main':
: undefined reference to `TQueue<int>::TQueue[in-charge](unsigned long)'
/tmp/cct0FJqL.o(.text+0x4e): In function `main':
: undefined reference to `TQueue<int>::~TQueue [in-charge]()'
collect2: ld returned 1 exit status
Wäre toll, wenn ihr mir sagt, woran das liegt.
Danke schon mal...