我通过指向函数的指针传递了一个映射,但现在我无法更改映射的内容,因为代码无法编译。我不确定我是否允许将地图作为指针传递。例如:
#include <iostream>
#include <stdlib.h>
#include <map>
#include <string>
using namespace std;
void faa(map<int,string> *baa){
*baa[1] = "somethingnew";
}
int main(){
map<int,string> bar;
bar[1] = "one";
bar[2] = "two";
bar[3] = "three";
int ii;
for(ii=1;ii<4;ii++){
cout<<"bar["<<ii<<"]="<<bar[ii]<<endl;
}
faa(&bar);
cout<<"after"<<endl;
for(ii=1;ii<4;ii++){
cout<<"bar["<<ii<<"]="<<bar[ii]<<endl;
}
}
当我编译它时,我收到错误:
error: no match for ‘operator*’ (operand type is ‘std::map >’) *baa[1] = "somethingnew";
像faa这样的功能可能吗?语法是什么?
答案 0 :(得分:8)
由于运营商优先级规则,Google Play Services
被解析为*baa[1]
而不是*(baa[1])
。您可以放入括号使其工作。但是,您最好使用引用:
(*baa)[1]
然后你只需要调用函数而不需要获取地图的地址:
void faa(map<int,string> &baa){
baa[1] = "somethingnew";
}
答案 1 :(得分:2)
您可以改为使用(*baa)[1]
。
默认优先级与您编写*(baa[1])
解释错误消息:如果baa
是指针,则可以使用[]
运算符访问指针指向的第n个元素,因此baa[1]
的类型是std::map
,它没有*运算符。