在C ++中初始化之前如何声明CAPnPROTO构建器?

时间:2019-01-15 16:17:36

标签: c++11 capnproto

我是CAP'N PROTO的新手。我已经创建了如下所述的cap'n proto结构和结构的一部分:

**struct InjectorRequestMsg {
dataFrame @0: InjectorDataFrame;  
injectorRequestID @1: UInt32;
injectorID @2: UInt32;
injectorScriptPath @3: Text;
injectorFuncName @4: Text;
injectorLogPath @5: Text;

} **

然后,我正在用C ++代码编写一个生成器,如下所示:
::capnp::MallocMessageBuilder message; InjectorRequestMsg::Builder injectorRequestMsg = message.initRoot<InjectorRequestMsg>();

然后,后续分配也可以正常工作,并且我能够设置所有值。 但是,当我尝试声明和初始化InjectorRequestMsg :: Builder之类的
InjectorRequestMsg::Builder injectorRequestMsg; injectorRequestMsg = message.initRoot<InjectorRequestMsg>();

然后,它给出以下错误: capnproto / InjectorMessage.capnp.h:197:3:错误:在此声明    Builder()=删除; //已删除,以防止错误使用。

因此,请您帮助我了解如何在两个不同的步骤中声明和初始化InjectorRequestMsg :: BuilderjectorRequestMsg,以便使InjectorRequestMsg :: BuilderjectorRequestMsg成为C ++类和所有成员函数的数据成员。 C ++类可以访问吗?

1 个答案:

答案 0 :(得分:0)

您可以这样做:

InjectorRequestMsg::Builder injectorRequestMsg = nullptr;

Cap'n Proto库通常会迫使您将初始化显式初始化为nullptr,这是说:“我还没有准备好初始化它。”对于未初始化的类型,它特别希望这样做,否则将导致进程崩溃,从而使其难以搞砸。相反,Reader类型不需要显式初始化,因为默认构造函数可以初始化Reader来表示结构的默认值。

相关问题