相当直截了当的问题。我有一个地图,我希望通过调用这样的函数来初始化:
map<string, int> myMap;
myMap = initMap( &myMap );
map<string, int> initMap( map<string, int> *theMap )
{
/* do stuff... */
然而,编译器正在呻吟。这是什么解决方案?
编辑1:
对不起,但我搞砸了。代码是用*theMap
正确编写的,但是当我发布问题时,我没有注意到我省略了*
。所以为了回答评论,我得到的错误信息是:
1>Roman_Numerals.cpp(21): error C2143: syntax error : missing ';' before '<'
抛出
map<char, int> initMap( map<char, int> *numerals );
使用VC ++ 2010 Express并在定义函数时再次出现相同的错误。
答案 0 :(得分:14)
要么:
map<string, int> myMap;
initMap( myMap );
void initMap( map<string, int>& theMap )
{
/* do stuff in theMap */
}
或做:
map<string, int> myMap;
myMap = initMap( );
map<string, int> initMap()
{
map<string, int> theMap;
/* do stuff in theMap */
return theMap;
}
即。让函数初始化你给它的地图,或者获取函数给你的地图。你们两个都做了(没有return
陈述!)
我会选择第一个选项。
答案 1 :(得分:8)
它可能会抱怨,因为您传递的是地图的地址,但是您的函数会按值接受地图。
你可能想要更像这样的东西:
void initMap(map<string, int>& theMap)
{
/* do stuff...*/
}
答案 2 :(得分:3)
您应该接受指针或最好是地图的引用。为方便起见,您还可以返回参考:
map<string, int>& initMap( map<string, int>& theMap )
...
// Call initMap
map<string, int> my_map;
initMap(my_map);
答案 3 :(得分:3)
规范解决方案只是
std::map<std::string, int> initMap();
// ...
std::map<std::string, int> myMap = initMap();
为什么使用输入参数作为返回值的棘手尝试?性能?现代编译器不关心。事实上,不构建空地图会稍快一些。
答案 4 :(得分:1)
为什么不做无效的initMap(map&amp; theMap),而不是制作这么多的地图副本?
答案 5 :(得分:1)
&myMap
是指向地图对象的指针,而参数theMap
是地图对象。
两种解决方案:
将myMap = initMap( &myMap );
更改为myMap = initMap( myMap );
。
或
将map<string, int> initMap( map<string, int> theMap )
更改为map<string, int> initMap( map<string, int> * theMap )
。
答案 6 :(得分:0)
游戏有点晚了但是: 我会从错误消息中猜到你错过了
#include <map>
位于代码顶部。所以编译器不知道map应该是一个模板,因此它会被后面的尖括号弄糊涂。
答案 7 :(得分:-1)
void initMap(map<String,int> &Map)
{
//Do something
}