关于MFC 中map容器全局变量的问题

时间:2021-03-04 19:13:14
一个MFC 对话框工程 有3个类
主对话框 是模态的对话框 类 CDIALOG1
非模态对话框 类 CDIALOG2
一个空类 Config

Config 类中 有个MAP 容器变量 定义代码如下

public:
    map<CString,_Config> m_Config;

Config 类中有个DataUP()函数 操作改变 m_Config 的值

 CDIALOG1,CDIALOG2 这两个类中都包含了Config类的头文件 

 CDIALOG1.CPP,CDIALOG2.CPP 中 都通过 定义个Config类的对象调用DataUP()修改m_Config的值

我的本意是想把这个m_Config 变量创建为全局变量 然后这两个CDIALOG1.CPP,CDIALOG2.CPP 都能修改 m_Config的值,可实际代码运行的时候  CDIALOG1.CPP,CDIALOG2.CPP 中调用DataUP()修改m_Config的变量不是同一个,就像CDIALOG1.CPP,CDIALOG2.CPP 分别定义了个m_Config各改各的值。
请问下怎样才能让CDIALOG1.CPP,CDIALOG2.CPP 修改的都是Config 类中的m_Config。

3 个解决方案

#1


包含了头文件只是让当前的类能够识别到所用到的类的标示,不是说就是用的同一个东西。如果你需要用的是同一个,有两种方法,第一种就是把都要用到的类定义成全局变量,比如在CDIALOG1.CPP中定义Config g_config;
而在CDIALOG2.CPP中声明extern Config g_config;表示用到的变量是其他cpp定义的,这样就保持操作的是同一个了。还有第二种就是用的设计模式里面的单例模式。在Config类中定义一个函数,比如:
static Config* GetInstance()
{
    static Config config;
    return &config;
}

然后再另外两个Cpp中都调用这个函数获取其指针,也能实现同样的效果

#2


把m_config定义到app类中,然后就可以调用theApp.m_config

#3


把那两个map改为static 

#1


包含了头文件只是让当前的类能够识别到所用到的类的标示,不是说就是用的同一个东西。如果你需要用的是同一个,有两种方法,第一种就是把都要用到的类定义成全局变量,比如在CDIALOG1.CPP中定义Config g_config;
而在CDIALOG2.CPP中声明extern Config g_config;表示用到的变量是其他cpp定义的,这样就保持操作的是同一个了。还有第二种就是用的设计模式里面的单例模式。在Config类中定义一个函数,比如:
static Config* GetInstance()
{
    static Config config;
    return &config;
}

然后再另外两个Cpp中都调用这个函数获取其指针,也能实现同样的效果

#2


把m_config定义到app类中,然后就可以调用theApp.m_config

#3


把那两个map改为static