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;
}
....
我已经用这个创建了一个 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;
}
....