undefined reference to vtable beim Aufruf Konstruktor der Basisklasse
Arbeite ich an einem Projekt für die Schule und ich lief in ein problem, ich bin nicht sicher, wie Sie Sie zu lösen. Hier sind die bits der code (nicht die ganze Klassen) und die Fehlermeldung:
class CCPU
{
public:
CCPU ( uint8_t * memStart,
uint32_t pageTableRoot );
virtual ~CCPU ( void ) { }
virtual uint32_t GetMemLimit ( void ) const = 0;
virtual bool SetMemLimit ( uint32_t pages ) = 0;
virtual bool NewProcess ( void * processArg,
void (* entryPoint) ( CCPU *, void * ),
bool copyMem ) = 0;
bool ReadInt ( uint32_t address,
uint32_t & value );
bool WriteInt ( uint32_t address,
m_PageTableRoot;
};
Dies ist die Klasse, die erbt von der oben:
class CProcManager : public CCPU
{
public:
CProcManager( uint8_t* memStart,uint32_t pageTableRoot ) : CCPU(memStart, pageTableRoot) {}
virtual uint32_t GetMemLimit ( void ) const;
virtual bool SetMemLimit ( uint32_t pages );
virtual bool NewProcess ( void * processArg,
void (* entryPoint) ( CCPU *, void * ),
bool copyMem );
static void InitInfoPages (uint8_t * pages_mem);
};
Wäre und das ist der code ruft den Konstruktor:
CProcManager init_ccpu((uint8_t*)mem, 32/*just a test number*/);
Die Fehlermeldung die ich bekomme:
solution.o: In function `CProcManager::CProcManager(unsigned char*, unsigned int)':
/home/Jan/OSY/OSY-2/solution.cpp:19: undefined reference to `vtable for CProcManager'
solution.o: In function `CProcManager::~CProcManager()':
/home/Jan/OSY/OSY-2/solution.cpp:15: undefined reference to `vtable for CProcManager'
collect2: error: ld returned 1 exit status
make: *** [test1] Error 1
Alle Methoden der CCPU und CProcManager Klassen definiert sind, und ich bin eigentlich nicht ändern, die CCPU-Klasse (diese Klasse wurde in das Projekt Zuordnung).
Kann mir jemand bitte erklären, wo das problem liegt(ich denke, das ist etwas, was mit Definitionen)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies wird wahrscheinlich bedeuten, dass Sie vergessen haben zu implementieren ist einer der virtuelle Funktionen deklariert
CProcManager
- wahrscheinlichGetMemLimit
. Oder dass Sie vergessen haben, den link mit der übersetzung Einheit enthält, die Umsetzung.Erklärung: es sieht aus wie du bist kompilieren mit GCC. Dass compiler die vtable in der gleichen übersetzungseinheit als erste nicht-inline, nicht-rein virtuelle Funktion deklariert in der Klasse. Wenn Sie nicht implementieren, dass die Funktion, die vtable wird fehlen, dass Fehler.