小编fba*_*ile的帖子

默认构造函数和虚拟继承

对于不提供默认构造函数的类,是否可以具有虚拟继承?

当前的菱形图(最简单的一个,没有提供默认构造函数的唯一更改)不编译(g ++ 4.4.3).

class A {
 public: 
  A(int ) {}
};
class B : virtual public A {
 public:
  B(int i) : A(i) {}
};
class C : virtual public A {
 public:
  C(int i) : A(i) {}
};
class D : public B, public C {
 public:
  D(int i) : B(i), C(i) {}
};
Run Code Online (Sandbox Code Playgroud)

谢谢,弗朗西斯科

c++

16
推荐指数
2
解决办法
5109
查看次数

protobuf必填字段和默认值

我是protobuf的新手,我开始考虑以下简单的例子

message Entry {
  required int32 id = 1;
}
Run Code Online (Sandbox Code Playgroud)

由c ++代码使用

#include <iostream>
#include "example.pb.h"
int main() {
  std::string mySerialized;
  {
    Entry myEntry;
    std::cout << "Serialization succesfull " 
              << myEntry.SerializeToString(&mySerialized) << std::endl;
    std::cout << mySerialized.size() << std::endl;
  }
  Entry myEntry;
  std::cout << "Deserialization successfull "
            << myEntry.ParseFromString(mySerialized) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

即使需要"id"字段,由于尚未设置,因此序列化缓冲区的大小为0(??).

当我反序列化消息时出现错误:

[libprotobuf ERROR google/protobuf/message_lite.cc:123] Can't parse message of type "Entry" because it is missing required fields: id
Run Code Online (Sandbox Code Playgroud)

这是正常的行为吗?

弗朗切斯科

ps-如果我使用值0初始化"id",则行为是不同的

pps-该SerializeToString函数返回true,ParseFromString返回false

c++ protocol-buffers

5
推荐指数
1
解决办法
6709
查看次数

标签 统计

c++ ×2

protocol-buffers ×1