Question

I am interested in being able to share a defined global variable across two cpp files. Is the following possible? I am interested in this to avoid having to initialize the global shared variable multiple times. I am having trouble being able to build this code. How would you recommend to declare/define myMap in this case?

MapHeader.h

#ifndef _MAP_HEADER_
#define _MAP_HEADER_

    #include <string>
    #include <map>
    using namespace std;

    extern const map<int, string> myMap = {{100 , "one hundred"}, {200,"two hundred"}, {300,"three hundred"}};

#endif // _MAP_HEADER_

FirstFile.h

#ifndef _FIRST_FILE_
#define _FIRST_FILE_

    #include "MapHeader.h"
    #include <iostream>
    #include <string>
    using namespace std;

    void myFunction1();

#endif

FirstFile.cpp

#include "FirstFile.h"

void myFunction1(){
    cout << "myFunction1()" << myMap[100] << endl;
}

SecondFile.h

#ifndef _SECOND_FILE_
#define _SECOND_FILE_

    #include "MapHeader.h"
    #include <iostream>
    #include <string>
    using namespace std;

    void myFunction2();

#endif

SecondFile.cpp

#include "SecondFile.h"

void myFunction2(){
    cout << "myFunction2()" << myMap[200] << endl;
}

Main.cpp

#include "FirstFile.h"
#include "SecondFile.h"

int main()
{
    myFunction1();
    myFunction2();
    return 0;
}

I am getting the error message:

error: passing 'const std::map<>' as 'this' argument of 'std:map<>' .....

Was it helpful?

Solution

In MapHeader.h, change your definition to extern map myMap; and then move your definition exactly as you had it in MapHeader.h into one of the .cpp's.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top