2016-12-08 96 views
1

我已创建一个addressbook.proto与该即时通讯良好,产生以下两个文件protobuffer throw runtime error as Failed to parse address book in latest latest version 3.0.0?

addressbook.pb.h 
addressbook.pb.cc 

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

我有看过我的地址簿名称readproto.cc

readproto代码。立方厘米

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配置--cflags --libs protobuf的

我得到的可执行文件没有什么不好,但我的疑问是我应该与此可执行加载哪些文件?

我累

./a.out addressbook.proto 

不知道哪些文件需要加载addressbook.proto是好?

result : Failed to parse address book 

我是新与protobuffer需要帮助它从过去三天在这个.Struggling这是我最后的希望PLSS帮助,谢谢

回答

1

由于您使用的是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; 
} 
.... 
+0

我从我在执行所在的路径已经在下面的代码 https://developers.google.com/protocol-buffers/docs/cpptutorial 你可以请让从这个链接,我需要有bin知道采取作为参数 – user7953556

+0

看到https://developers.google.com/protocol-buffers/docs/cpptutorial#writing-a-message你运行你的程序是这样的:。./a.out my_adress_book.bin – HughB

+0

谢谢你的工作时? – user7953556

0

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

+0

能否请你告诉我,比如无法捕捉你的话请? – user7953556

+0

ofstream file(“./ serial.data”); address_book.SerializeToOstream(&file); – JazzSoft

相关问题