Ich habe eine Klasse:"Missing VTable" für destructor, aber destructor definiert ist
class Optimizer {
public:
Optimizer(mongoc_client_t *dbClient, std::string strategyName, std::string symbol, int group);
virtual ~Optimizer() = 0;
und seine Umsetzung:
#include "optimizers/optimizer.h"
Optimizer::Optimizer(mongoc_client_t *dbClient, std::string strategyName, std::string symbol, int group) {
// ...
}
Optimizer::~Optimizer() {
free(data);
}
aber ich bekomme die folgenden Fehler scheinbar im Zusammenhang mit dem Destruktor nicht definiert ist :
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
Was mache ich falsch? Die vollständige Headerdefinition ist here und die Implementierung ist here.
Ich habe auch versucht, den Destruktor nicht virtuell, aber es hilft nicht.
Sie haben es also rein virtuell gemacht und eine Implementierung bereitgestellt? –
Bitte bearbeiten Sie Ihren Beitrag und fügen Sie einen [mcve] ein. –
Ich sah in anderen StackOverflow-Posts, dass das akzeptabel ist. Aber ich habe auch versucht, es nicht rein virtuell zu machen. –