在两个cpp文件中的头中共享已定义的全局变量

时间:2014-03-12 22:49:28

标签: c++ header global-variables extern

我感兴趣的是能够跨两个cpp文件共享已定义的全局变量。以下是可能的吗?我对此感兴趣,以避免多次初始化全局共享变量。我无法构建此代码。在这种情况下,您如何建议声明/定义myMap?

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;
}

我收到错误消息:

  

错误:传递&#39; const std :: map&lt;&gt;&#39;作为&#39;这个&#39; &#39; std:map&lt;&gt;&#39;的参数.....

1 个答案:

答案 0 :(得分:3)

在MapHeader.h中,将您的定义更改为extern map myMap;然后将您在MapHeader.h中的定义与您在.cpp的一个中的定义完全相同。