C++ &引用;缺少vtable“;对于析构函数,但定义了析构函数
我有一门课:C++ &引用;缺少vtable“;对于析构函数,但定义了析构函数,c++,compiler-errors,destructor,vtable,C++,Compiler Errors,Destructor,Vtable,我有一门课: 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
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
架构x86_64的未定义符号:
“优化器的类型信息”,引用自:
ReversalsOptimizer.o中ReversalsOptimizer的类型信息
“vtable for Optimizer”,引用自:
优化器中的优化器(_mongoc_client_t*,std::_1::basic_string,std::_1::basic_string,int)
优化器::~Optimizer()在Optimizer.o中
注意:缺少vtable通常意味着第一个非内联虚拟成员函数没有定义。
ld:找不到架构x86_64的符号
叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)
make:**[prepareData]错误1
我做错了什么?完整的头定义为,实现为
我还尝试将析构函数设置为非虚拟,但没有任何帮助。问题正是错误消息所说的: 注意:缺少vtable通常意味着第一个非内联虚拟成员函数没有定义 具体来说,您声明并调用了此函数,但从未定义过此函数:
virtual void prepareStudies();
问题正是错误消息所说的: 注意:缺少vtable通常意味着第一个非内联虚拟成员函数没有定义 具体来说,您声明并调用了此函数,但从未定义过此函数:
virtual void prepareStudies();
将Optimizer类中的其他虚拟函数设置为纯虚拟函数解决了问题。将Optimizer类中的其他虚拟函数设置为纯虚拟函数解决了问题。因此,您将其设置为纯虚拟函数并提供了实现?请编辑您的帖子并包含.I在其他StackOverflow帖子中看到这是可以接受的。不过,我也尝试过将其设置为非纯虚拟的。好吧,要么您尝试实例化一个抽象基类,要么这不是您的全部代码,因为您将其设置为纯虚拟并提供了一个实现?请编辑您的帖子,并包括一个。我在其他StackOverflow帖子中看到,这是可以接受的。不过,我也试着让它成为非纯虚拟的,或者你想实例化一个抽象基类,或者这不是你的全部代码,因为