为什么在 protobuf Message 上调用方法会抛出一个名为 error 的纯虚方法?
Why does calling methods on a protobuf Message throw a pure virtual method called error?
我正在尝试使用 Google Protobuf 库,我想将一堆不同的消息类型一起存储在一个容器中,并在我将它们从容器中拉出时获取它们的名称。我想我可以使用接口类型 google::protobuf::Message
来做到这一点。这是我目前所拥有的。
#include <iostream>
#include "addressbook.pb.h"
using namespace std;
int main(void) {
vector<shared_ptr<google::protobuf::Message>> vec;
{
tutorial::AddressBook address_book;
vec.push_back(shared_ptr<google::protobuf::Message>(&address_book));
}
cout << "Typename is " << vec.back()->GetTypeName() << endl;
return 0;
}
调用 GetTypeName
会引发以下错误:
pure virtual method called
terminate called without an active exception
Aborted (core dumped)
请注意,这是我在玩弄这里找到的教程:
https://developers.google.com/protocol-buffers/docs/cpptutorial
address_book
在堆栈上,当它超出范围时将被删除,没有智能指针可以阻止它。
只需使用 std::make_shared
创建您的书,它将在堆上,其生命周期将由 std::shared_ptr
.
管理
{
auto address_book = shared_ptr<google::protobuf::Message>(new tutorial::AddressBook);
vec.push_back(address_book);
}
我正在尝试使用 Google Protobuf 库,我想将一堆不同的消息类型一起存储在一个容器中,并在我将它们从容器中拉出时获取它们的名称。我想我可以使用接口类型 google::protobuf::Message
来做到这一点。这是我目前所拥有的。
#include <iostream>
#include "addressbook.pb.h"
using namespace std;
int main(void) {
vector<shared_ptr<google::protobuf::Message>> vec;
{
tutorial::AddressBook address_book;
vec.push_back(shared_ptr<google::protobuf::Message>(&address_book));
}
cout << "Typename is " << vec.back()->GetTypeName() << endl;
return 0;
}
调用 GetTypeName
会引发以下错误:
pure virtual method called
terminate called without an active exception
Aborted (core dumped)
请注意,这是我在玩弄这里找到的教程: https://developers.google.com/protocol-buffers/docs/cpptutorial
address_book
在堆栈上,当它超出范围时将被删除,没有智能指针可以阻止它。
只需使用 std::make_shared
创建您的书,它将在堆上,其生命周期将由 std::shared_ptr
.
{
auto address_book = shared_ptr<google::protobuf::Message>(new tutorial::AddressBook);
vec.push_back(address_book);
}