У меня есть класс:«пропавших без вести виртуальные таблицы» для деструктора, но деструктор определяется
class Optimizer {
public:
Optimizer(mongoc_client_t *dbClient, std::string strategyName, std::string symbol, int group);
virtual ~Optimizer() = 0;
и ее реализации:
#include "optimizers/optimizer.h"
Optimizer::Optimizer(mongoc_client_t *dbClient, std::string strategyName, std::string symbol, int group) {
// ...
}
Optimizer::~Optimizer() {
free(data);
}
Но я получаю следующее сообщение об ошибке, казалось бы, связанные с деструктор быть неопределенным :
Undefined symbols for architecture x86_64:
"typeinfo for Optimizer", referenced from:
typeinfo for ReversalsOptimizer in reversalsOptimizer.o
"vtable for Optimizer", referenced from:
Optimizer::Optimizer(_mongoc_client_t*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int) in optimizer.o
Optimizer::~Optimizer() in optimizer.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [prepareData] Error 1
Что я делаю неправильно? Полное определение заголовка - here, а реализация - here.
Я также попытался сделать деструктор не виртуальным, но это не поможет.
Значит, вы сделали его чистым виртуальным и обеспечили реализацию? –
Пожалуйста, отредактируйте ваше сообщение и включите [mcve]. –
Я видел в других сообщениях StackOverflow, что это приемлемо. Но опять же, я также попытался сделать его не чистым виртуальным. –