Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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++_Templates_Stl - Fatal编程技术网

C++ +;=运算符,并使用模板进行配对

C++ +;=运算符,并使用模板进行配对,c++,templates,stl,C++,Templates,Stl,我在阅读一个库的代码库时遇到了以下问题 以下代码中使用的errorMap,定义为: map-errorMap; 守则的有关部分为: errorMap[“替换”]+=make_对(目标长度,替换); errorMap[“插入”]+=make_对(目标长度,插入); errorMap[“删除”]+=make_对(目标长度,删除); 以上部分是抛出编译错误。当通过自己的构建系统运行库时,代码似乎正在编译。有人能解释一下这里到底发生了什么吗 PS:我已经在cppreference和其他站点查看了pa

我在阅读一个库的代码库时遇到了以下问题

以下代码中使用的
errorMap
,定义为:

map-errorMap;
守则的有关部分为:

errorMap[“替换”]+=make_对(目标长度,替换);
errorMap[“插入”]+=make_对(目标长度,插入);
errorMap[“删除”]+=make_对(目标长度,删除);
以上部分是抛出编译错误。当通过自己的构建系统运行库时,代码似乎正在编译。有人能解释一下这里到底发生了什么吗


PS:我已经在cppreference和其他站点查看了pair文档,没有一个站点为pair指定了
+=
运算符。这是我第一次遇到带有模板参数的
make_pair
,我也找不到更多信息

这不是关于这对情侣,而是关于地图。用于在地图中插入或更新元素

例如在a
std::map myMap{{'a',27},{'b',3},{'c',1}中,我可以执行以下操作(如上面链接的页面所示):

我还可以做以下工作:

myMap['b'] += 9; //Now the value associated to b is 3 + 9 = 12
在问题中公布的3行代码中,与括号内字符串相关的值正在更新

运算符+=
可能已为带有模板的对重载。(查看此问题的答案)这可能就是为什么会出现这些错误,而不是以下错误(将char替换为string):

你[可能][1]想看看这些


[1] 字体可能是因为我不确定我在说什么。我想发表评论,但没有足够的代表,所以我尽了最大努力给出了答案。

也许他们定义了自己的运算符+=?不太可能,除非有可能重载pair的+=运算符。这可能吗?我认为错误是因为
make\u pair
使用完美转发,只有在推断类型时才起作用。通过指定类型,它将只接受右值。我不知道为什么错误会消失。@immibis是正确的。我在源文件中找到+=运算符。有可能重载一对的+=,这对我来说是新信息。非常感谢。它只是相应值的加法。切换生成系统时一定丢失了头文件。+=与错误无关。您遇到了C++11破坏C++98代码的罕见案例之一。谢谢,您链接的答案非常有用。这个问题在评论中得到了回答。这是一个c++98的东西,我是用c++11编译的。之后它成功地编译了。
myMap['b'] += 9; //Now the value associated to b is 3 + 9 = 12
error: no match for ‘operator+=’ (operand types are ‘std::map<char, std::pair<int, double> >::mapped_type {aka std::pair<int, double>}’ and ‘std::pair<int, double>’)
cannot convert ‘targetLength’ (type ‘int’) to type ‘int&&’