我在类CDlg头文件中定义 int m_Level权限是public, 并此类的构造函数赋值 在另一个类中用到此变量 void CLoginDlg::OnLoginEnter() 

    CDlg::m_Level=1; 
    OnOK(); 

已经包含上面类头文件,编译时提示如下: : error C2597: illegal reference to data member 'CDlg::m_Level' in a static member function 是我使用方法不对,还是其它的 
不用全局变量 
望指点一下? 

解决方案 »

  1.   

    你这样的用法只有在m_Level为类CDlg的静态变量时才对。
    正常的变量的话,应该先定义一个CDlg的对象,然后使用.操作符访问。
    比如extern CDlg Mydlg;
    //其它地方有定义
    void CLoginDlg::OnLoginEnter() 

        MyDlg.m_Level=1; 
        OnOK(); 

      

  2.   

    static int m_Level; 吗
    试过,没用,提示错误:单独重新工程试的:error LNK2001: unresolved external symbol "public: static int CDdsDlg::m_name" (?m_name@CDdsDlg@@2HA)
    error LNK2001: unresolved external symbol "public: static int CDdsDlg::m_name" (?m_name@CDdsDlg@@2HA)
    : fatal error LNK1120: 1 unresolved externals
      

  3.   

    在类里定义static int m_Level;
    然后要在cpp里初始化。
    static int CDlg::m_Level = 0;
      

  4.   


    把5楼回答的:static int CDlg::m_Level = 0; 
    去掉static,直接int CDlg::m_Level = 0; 
      

  5.   

    在CDlg.cpp中,int m_Level;
    在CLoginDlg中,extern int m_Level;
    应该能用了。
      

  6.   

    我在类CDlg头文件中定义 int m_Level权限是public, 并此类的构造函数赋值 
    在另一个类(CLoginDlg)中用到此变量 
    ===============#include "Dlg.h"void CLoginDlg::OnLoginEnter() 

    CDlg *p=(CDlg *)GetParent();
    p->m_Level=1; OnOK(); 
      

  7.   

    楼主,6楼已经给出答案了。
    //Class1.h
    class CClass1  
    {
    public:
    CClass1();
    virtual ~CClass1(); static int m_nFlag;};
    //Class1.cpp
    #include "Class1.h"
    int CClass1::m_nFlag = 0;CClass1::CClass1()
    {}CClass1::~CClass1()
    {}//Class2.h
    #include "Class1.h"class CClass2 : public CClass1
    {
    public:
    CClass2();
    virtual ~CClass2();};//Class2.cpp
    #include "Class2.h"CClass2::CClass2()
    {
    CClass1::m_nFlag = 0;
    }CClass2::~CClass2()
    {}