一个MFC 对话框工程 有3个类
主对话框 是模态的对话框 类 CDIALOG1
非模态对话框 类 CDIALOG2
一个空类 ConfigConfig 类中 有个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。

解决方案 »

  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