protobuffer 抛出运行时错误,因为无法解析最新版本 3.0.0 中的地址簿?

protobuffer throw runtime error as Failed to parse address book in latest current version 3.0.0?

我已经用这个创建了一个 addressbook.proto 我可以生成以下两个文件

addressbook.pb.h
addressbook.pb.cc

protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto

我有一个代码可以读取我的地址簿名称 readproto.cc

readproto.cc

int main(int argc, char* argv[]) {
if (argc != 2) {
    cerr << "Usage:  " << argv[0] << " ADDRESS_BOOK_FILE" << endl;
    return -1;
  }


tutorial::AddressBook address_book;

  {
    // Read the existing address book.
    fstream input(argv[1], ios::in | ios::binary);
    if (!input) {
      cout << argv[1] << ": File not found.  Creating a new file." << endl;
    } else if (!address_book.ParseFromIstream(&input)) {
      cerr << "Failed to parse address book." << endl;
      return -1;
    }
  }

----
}

我编译为

c++ readproto.cc addressbook.pb.cc `pkg-config --cflags --libs protobuf

我得到的可执行文件没什么问题,但我怀疑我应该用这个可执行文件加载什么文件?

我很累

./a.out addressbook.proto   

不确定需要加载哪个文件addressbook.proto好吗??

result : Failed to parse address book

.

我是 protobuffer 的新手,需要帮助。从过去三天开始苦苦挣扎,这是我最后的希望,请帮忙解决这个问题

您必须指定实际的二进制数据。数据格式在 .proto 文件中定义。尝试先将数据导出到文件中。然后再读。

由于您使用的是 protobuf tutorial,请这样调用您的程序:

./a.out my_adress_book.bin

它将创建一个空的 my_adress_book.bin 然后提示您添加条目。

这部分创建一个空文件:

fstream input(argv[1], ios::in | ios::binary);
if (!input) {
  cout << argv[1] << ": File not found.  Creating a new file." << endl;
} 
....