Я искал какое-то время и нашел много нити/страниц, которые связаны с проблемой у меня есть, но я не смог найтине может исправить неопределенную ссылку на таблицу
- объяснение почему эта ошибка возникает
- рабочий раствор для моего конкретного случая
ниже приводится Scanner.h
:
class BaseReader {
public:
virtual ~BaseReader();
virtual const char* read() = 0;
virtual long position() = 0;
virtual long size() = 0;
virtual void seek(long position) = 0;
};
class CharReader : public BaseReader {
public:
CharReader(const char* source);
CharReader(const char* source, long size);
~CharReader();
const char* read();
long position();
long size();
void seek(long position);
private:
char* _source;
long _position;
long _size;
};
В Scanner.cpp
Я просто реализую один из конструкторов CharReader
.
Я использую Code :: Blocks, но скомпилировать его сам по себе приводит к той же самой проблеме.
[email protected]:~/git/hiterator (CPP)$ g++ main.cpp hiterator/Scanner.cpp -o main
/tmp/cclNNwgl.o: In function `hiterator::CharReader::CharReader(char const*)':
Scanner.cpp:(.text+0x16): undefined reference to `vtable for hiterator::CharReader'
collect2: ld gab 1 als Ende-Status zurück
@qdii:
#include "Scanner.h"
using namespace hiterator;
#include <stdlib.h>
#include <string.h>
CharReader::CharReader(const char* source) {
_size = strlen(source);
_source = (char*) malloc(_size + 1);
memcpy(_source, source, _size + 1);
}
Вы также можете вставить .cpp? вероятно, отсутствующее определение одной из виртуальных базовых функций. – qdii
@qdii См. Мое редактирование. –
ну все чистые виртуальные функции должны иметь определение, большинство из них не делают :) – qdii