[英]How to use Google Protobuf Map in C++?
我試圖在C ++中使用新的protobuf Map功能。
以下是在Ubuntu 14.04上使用gcc 4.9.2 C ++ 14和protobuf 3.0.0-alpha-4完成的:
消息定義:
message TestMap {
map<string,uint64> map1 = 1;
}
然后,我嘗試編譯以下示例程序:
auto test = debug::TestMap::default_instance();
auto map = test.mutable_map1();
string key = "key";
uint64 val = 20;
map[key] = val;
使用[]語法處理地圖對std :: unordered_map完全正常。 但protobuf實現總是會產生以下編譯器錯誤:
error: no match for ‘operator[]’ (operand types are ‘google::protobuf::Map<std::basic_string<char>, long unsigned int>*’ and ‘std::string {aka std::basic_string<char>}’)
我不明白為什么不知道這個運算符,因為清楚地找到了頭文件google :: protobuf :: Map ,這應該是一個基本的操作。
你知道這里出了什么問題嗎? 我歡迎使用新的protobuf地圖的任何例子,因為我在研究了幾個小時之后沒有找到任何在線。
正如Pixelchemist指出的那樣,問題是map
是一個指針,因此[]
運算符不起作用。
因此,需要首先取消引用指針。 *map[key]
也不起作用,因為編譯器先解析[]
然后再解析*
。 以下工作:
(*map)[key] = val;
雖然這是一個非常基本的問題,但這代表了C ++和Protocol Buffers的良好學習機會。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.