Apache Thrift对生成的代码中的vtable的未定义引用

时间:2018-11-13 01:47:20

标签: c++ debugging thrift

我在一个项目中使用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);

1 个答案:

答案 0 :(得分:1)

实际上非常简单。我忘记了在编译项目时添加生成的代码文件。