Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++;? 我尝试使用C++中的新的原BoF映射功能。p>_C++_Hashmap_Protocol Buffers_C++14 - Fatal编程技术网

如何在C++;? 我尝试使用C++中的新的原BoF映射功能。p>

如何在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

以下是在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::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;