0

我是 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: error: declared here Builder() = delete; // 删除以阻止不正确的使用。

因此,您能否帮助我理解如何在两个不同的步骤中声明和初始化 InjectorRequestMsg::Builder injectorRequestMsg,以便我将 InjectorRequestMsg::Builder injectorRequestMsg 作为 C++ 类的数据成员和 C++ 类的所有成员函数可以访问吗?

4

1 回答 1

0

你可以做:

InjectorRequestMsg::Builder injectorRequestMsg = nullptr;

Cap'n Proto 库通常会强制您显式初始化 tonullptr以表示:“我还没有准备好初始化它。” 它特别希望在未初始化的情况下使用会使进程崩溃的类型,以使其难以搞砸。相反,Reader类型不需要显式初始化,因为默认构造函数可以初始化Reader以表示结构的默认值。

于 2019-01-24T02:42:52.410 回答