Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a function with return type map<>?

Fairly straightforward question. I have a map that I wish to initialize by calling a function like so:

map<string, int> myMap;

myMap = initMap( &myMap );

map<string, int> initMap( map<string, int> *theMap )
{
    /* do stuff... */

However, the compiler is moaning. What's the solution to this?

EDIT 1:

I'm sorry, but I screwed up. The code was correctly written with *theMap, but when I posted the question, I failed to notice that I had omitted the *. So to answer the comment, the error message I get is:

1>Roman_Numerals.cpp(21): error C2143: syntax error : missing ';' before '<'

which is thrown at

map<char, int> initMap( map<char, int> *numerals );

using VC++ 2010 Express and the same error again when I define the function.

like image 430
IAE Avatar asked Nov 27 '22 06:11

IAE


2 Answers

Either do:

map<string, int> myMap;
initMap( myMap );

void initMap( map<string, int>& theMap )
{
    /* do stuff in theMap */
}

or do:

map<string, int> myMap;
myMap = initMap(  );

map<string, int> initMap()
{
    map<string, int> theMap;
    /* do stuff in theMap */
    return theMap;
}

i.e. let the function initialise the map you give it, or take the map the function gives you. You're doing both (without a return statement too!)

I'd go for the first option.

like image 93
jilles de wit Avatar answered Dec 05 '22 10:12

jilles de wit


It's probably complaining because you're passing the address of the map, but your function accepts the map by value.

You might want something more like this:

void initMap(map<string, int>& theMap)
{
    /* do stuff...*/
}
like image 27
Fred Larson Avatar answered Dec 05 '22 09:12

Fred Larson