【发布时间】:2022-01-07 04:57:44
【问题描述】:
我正在使用带有 protobuf 的 C++14 进行编码。
在我的 proto 文件中,我设计了如下嵌套消息:
message Object {
// something
};
message Response {
repeated Object list = 1;
};
在我的 C++ 项目中,我尝试插入一个元素:
Object obj;
Response res;
// res.mutable_list()->Add(obj); // ERROR!
res.mutable_list()->Add()->CopyFrom(obj);
我真的不知道为什么但是Add(obj) 会导致编译错误:
无法将“对象”左值绑定到“对象&&”
res.mutable_info()->添加(obj);
我真的不明白为什么,因为在头文件中,我确实找到了函数inline void RepeatedPtrField<Element>::Add(Element&& value) 和inline void RepeatedPtrField<Element>::Add(const Element& value) 的定义。但是res.mutable_list()->Add(std::move(obj)); 和res.mutable_list()->Add(obj); 都会导致一些编译错误。另一个错误如下,我完全无法理解它是什么:
没有匹配函数调用 'google::protobuf::RepeatedPtrField::TypeHandler::New(Google::protobuf::Area*&, std::remove_reference
res.mutable_list()->Add()->CopyFrom(obj); 有效,但为什么我不能直接调用Add(obj)?
【问题讨论】:
标签: c++ protobuf-c