我在一个项目中使用Apache Thrift。我为客户端生成了代码。当我尝试编译时,出现了一系列类似的链接器错误:
undefined reference to `vtable for com::cybersecwise::thrift::ElasticFSServiceClient'
当尝试使用点范围解析来实现构造函数时,我遇到了同样的错误,但是我可以通过在hpp文件中实现它来摆脱它。即,以下代码:
ElasticFSThriftClient(const string& server, int port) {
stdcxx::shared_ptr<TTransport> socket(new TSocket(server, port));
stdcxx::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
stdcxx::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
ElasticFSServiceClient client(protocol);
}
现在的问题是我正在实例化该类,并再次获取对vtable的未定义引用。
我知道,当没有为虚函数定义声明时,就会出现此错误。事实是,只要不实例化该对象,它似乎就可以编译。
ElasticFSThriftClient elasticFsClient("localhost", 9090);
答案 0 :(得分:1)
实际上非常简单。我忘记了在编译项目时添加生成的代码文件。