如何在C++;? 我尝试使用C++中的新的原BoF映射功能。p>
以下是在Ubuntu 14.04上使用gcc 4.9.2 C++14和protobuf 3.0.0-alpha-4完成的: 消息定义:如何在C++;? 我尝试使用C++中的新的原BoF映射功能。p>,c++,hashmap,protocol-buffers,c++14,C++,Hashmap,Protocol Buffers,C++14,以下是在Ubuntu 14.04上使用gcc 4.9.2 C++14和protobuf 3.0.0-alpha-4完成的: 消息定义: message TestMap { map<string,uint64> map1 = 1; } 使用[]语法访问映射对于std::unordered_映射来说效果非常好。但是protobuf实现总是产生以下编译器错误: error: no match for ‘operator[]’ (operand types are ‘google
message TestMap {
map<string,uint64> map1 = 1;
}
使用[]语法访问映射对于std::unordered_映射来说效果非常好。但是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>}’)
错误:与“operator[]”不匹配(操作数类型为“google::protobuf::Map*”和“std::string{aka std::basic_string}”)
我不明白为什么不知道这个操作符,因为头文件google::protobuf::Map被清晰地找到了,这应该是一个基本的操作
你知道这里出了什么问题吗?我欢迎任何使用新protobuf地图的例子,因为我在网上搜索了几个小时后还没有找到任何 正如Pixelchemist所指出的,问题在于map
是一个指针,因此[]
操作符不起作用
因此,需要首先取消对指针的引用<代码>*映射[key]也不起作用,因为编译器首先解析[]
,然后解析*
。以下方法确实有效:
(*map)[key] = val;
虽然这是一个非常基本的问题,但这对于C++和协议缓冲区来说是一个很好的学习机会。p> 您的
map
变量似乎是指针。你试过了吗?@Pixelchemist:你说得对,谢谢你指出这一点<代码>*map[key]不起作用,但*(map[key]
起作用。相当基本的一个!我一直在看错误的方向。@Pixelchemist:你想发布答案还是我应该发布?FWIW,你可以这样做:auto&map=*test.mutable_map1()代码>,然后map[key]
就可以了。谢谢肯顿!这更容易理解和维护;可变映射是否是访问映射的唯一方法?@ChristopherPisz No.test.map1()
提供了一个const
引用,如果您只需要访问而不需要修改。医生来了
(*map)[key] = val;