这个 protobuf 错误中的“预期类型名称”是什么意思?

问题描述 投票:0回答:1

抱歉,对 protobuf 还很陌生。复制粘贴一些代码并得到一个没有多大意义的错误。请任何人都可以帮忙。

message person {
  required string name = 1;

  enum PhoneType {
    MOBILE = 0;
    HOME   = 1;
    WORK   = 2;
  }

  message PhoneNumber {
    required string    number = 1;
    optional PhoneType type   = 2 [default = HOME];
  }
}

我得到的错误是当我运行 protoc p2.proto --cpp_out=.:

p2.proto:4:1: Expected "required", "optional", or "repeated".
p2.proto:4:1: Expected type name.
p2.proto:10:1: Expected "required", "optional", or "repeated".
p2.proto:10:1: Expected type name.
protocol-buffers protobuf-net
1个回答
0
投票

我不确定你使用哪种语法,但如果它是 proto3 你需要修复一些东西 首先,由于相关文档和论坛(例如),您不需要在每个字段后面使用required,因为它毫无意义,在“protobuf”中,默认情况下所有字段都被视为必填。 此版本中也不允许使用默认值。 接下来最重要的问题是,您需要显式声明您的对象,然后通过分配的名称在主模型中引用这些对象,如下所示:

message Person{
    string name = 1;
    PhoneType PersonPhoneType = 2;
    PhoneNumber PersonPhoneNumber = 3;
}
enum PhoneType{
    MOBILE = 1;
    HOME = 2;
    WORK = 3;
}
message PhoneNumber{
    string Number = 1;
}

或:

message Person{
    string name = 1;
    PhoneNumber PersonPhoneNumber = 2;
}
enum PhoneType{
    MOBILE = 1;
    HOME = 2;
    WORK = 3;
}
message PhoneNumber{
    string Number = 1;
    PhoneType PersonPhoneType = 2;
}
© www.soinside.com 2019 - 2024. All rights reserved.