我在一个类Ctest中定义的公共变量CString m_strPath,通过:
CFileDialog indlg(...);
...
m_strPath=indlg.GetPathName();
对m_strPath进行了赋值,为什么在其他cpp文件中通过
Ctest te;
引用te.m_strPath时,这个变量值为空呢?
还有为什么在StdAfx.h中定义“extern int a ”正确,而定义“extern CString a” 就会出错呢。对于像CString,DWORD类型的怎么定义全局变量呢?请哪位指点一下。

解决方案 »

  1.   

    CFileDialog indlg(...);
    ...
    m_strPath=indlg.GetPathName();
    这段代码应该放在枸造函数中
      

  2.   

    CString,DWORD类型的全局变量一般定义在CWinApp派生类的cpp文件中,你可以模仿theApp的定义方法。
      

  3.   

    假如你的工程叫做Test,你要定义一个CString类型的全局变量,那么你可以这样做:
    在CTestApp theApp下面加上CString g_strTest;
    在CTestApp类的声明的后面,也就是TestApp.h的最后,加上extern CString g_strTest;这样的好处是你不用在其他cpp文件中用extern去声明外部变量了,因为App类的头文件默认是每个cpp文件都要包含的。
      

  4.   

    多谢codewarrior,已经可以访问其他变量了。
    还请问jmshl,我在一个确定按钮里添加的那段代码,没有写在构造函数,这样的话没有办法在其他地方使用m_strPath吗?请指点一下,谢谢。
      

  5.   

    为什么在其他cpp文件中通过
    Ctest te;
    引用te.m_strPath时,这个变量值为空呢?你搞错了一点,你在其他cpp文件里定义的Ctest,你确定,你用CFileDialog对它进行赋值了吗?
      

  6.   

    赋值了。
    CFileDialog indlg;
    m_strPath=indlg.GetPathName();好像是这个,现在没有源程序,具体我不记得了。
    但是如jmshl所说我把CFileDialog那段代码放到构造函数里以后,在其他文件里访问m_strPath就不为空了。真是奇怪。还有,新遇到了一个问题。
    对于ClistBox控件定义了两个变量m_ctrValue; m_strValue;
    对鼠标选中某一行的事件SelChange编写函数:
    m_ctrValue.SelCur();
    我给忘了
    m_strValue=选中的值
    反正m_strValue在当前文件里测试不为空,为什么在其他文件里用时就是空呢。我已经把它定义成全局变量了。请给指点一下。
      

  7.   

    兄弟:应该这样吧!Ctest * te;
    先得到Ctest的指针载引用
    te-〉m_strPath