我是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 ++类可以访问吗?
答案 0 :(得分:0)
您可以这样做:
InjectorRequestMsg::Builder injectorRequestMsg = nullptr;
Cap'n Proto库通常会迫使您将初始化显式初始化为nullptr
,这是说:“我还没有准备好初始化它。”对于未初始化的类型,它特别希望这样做,否则将导致进程崩溃,从而使其难以搞砸。相反,Reader
类型不需要显式初始化,因为默认构造函数可以初始化Reader
来表示结构的默认值。