Udefineret reference til defineret funktion
Hej Eksperter!Står med et irriterende problem. Er ved at udvikle multiplayer til et hobby spil, og har posted på forskellige fora for at finde en god løsning til min buffer. Det lader til at virke, så længe funktionerne defineres i den fil der benytter dem, i stedet for i sin egen fil. Lad mig lige give et eksempel da det er en forfærdelig forklaring, jeg kommer med :)
buffer.h:
class Serializable;
class Buffer
{
public:
enum { MAX_SIZE = 1024 };
char buf[MAX_SIZE];
int length;
int index;
Buffer& operator<<(Serializable &t);
template < class T >
Buffer& operator<<(T t);
};
class Serializable {
public:
virtual void serialize( Buffer &b ) = 0;
};
buffer.cpp:
template < class T >
Buffer& Buffer::operator<<(T t)
{
if ( (index + sizeof(T)) > MAX_SIZE) // error, overflow
;
memcpy( &(buf[index]), &t, sizeof(T) );
index += sizeof(T);
length += sizeof(T);
return *this;
}
Buffer& Buffer::operator<<(Serializable &t)
{
t.serialize( *this );
return *this;
}
Hvis min main.cpp ser således ud:
#include "buffer.h"
int main(int argc, char **argv)
{
Buffer test; test.index = 0; test.length = 0;
int lala = 2000;
test << lala;
}
Får følgende fejl i ovenstående main funktion:
undefined reference to `Buffer& Buffer::operator<< <int>(int)'
Men hvis jeg ændrer main.cpp til at se således ud:
#include "buffer.h"
template < class T >
Buffer& Buffer::operator<<(T t)
{
if ( (index + sizeof(T)) > MAX_SIZE) // error, overflow
;
memcpy( &(buf[index]), &t, sizeof(T) );
index += sizeof(T);
length += sizeof(T);
return *this;
}
Buffer& Buffer::operator<<(Serializable &t)
{
t.serialize( *this );
return *this;
}
int main(int argc, char **argv)
{
Buffer test; test.index = 0; test.length = 0;
int lala = 2000;
test << lala;
}
I denne ændrede main.cpp fungerer alt perfekt, men jeg ønsker at have deklarationerne i deres egen filer. Jeg bruger C++ under Linux, Anjuta som IDE og gcc som compiler. Kan ikke gennemskue fejlen, og det har irriteret mig længe. Vil sætte pris på ethvert input. Hvis der er tvivl eller jeg har været uklar om mit problem visse steder, så stil endelig spørgsmål. Jeg er ivrig efter at løse dette problem.
På forhånd tak,
Vandborg.