我正在使用calculator-server.c++
示例,我尝试从中提取thisCap()
以从外部访问服务器的功能。因为thisCap()
是protected
,我写了自己的公众号getCapability()
:
class CalculatorImpl final: public Calculator::Server {
// Implementation of the Calculator Cap'n Proto interface.
public:
Calculator::Client getCapability() {
return thisCap();
}
然后我创建服务器并getCapability()
从我的主服务器调用:
auto calculatorImpl = kj::heap<CalculatorImpl>();
auto myCapability = calculatorImpl->getCapability();
但是这个段错误:
Program received signal SIGSEGV, Segmentation fault.
0x000055555573c847 in capnp::Capability::Server::thisCap() ()
(gdb) bt
#0 0x000055555573c847 in capnp::Capability::Server::thisCap() ()
#1 0x000055555573c93d in Calculator::Server::thisCap() ()
#2 0x000055555573e541 in CalculatorImpl::getCapability() ()
#3 0x0000555555739a98 in main ()
按照源代码,我最终得到了这个:
Capability::Client Capability::Server::thisCap() {
return Client(thisHook->addRef());
}
所以它似乎thisHook
是一个 nullptr,这是有道理的,因为这就是它的初始化方式。
我只是不知道它在什么时候被初始化(这解释了它何时绝对没有被初始化)。
任何的想法?