代码如下:
static UINT m_nTimer;
void  TdmPdmToolsReg::AutoEvaluate()
{
// TdmPdmToolsReg *p=new TdmPdmToolsReg();
// p->m_nTimer=SetTimer(NULL,1,5000,(TIMERPROC)TimeProc);
//        TdmPdmToolsReg::m_nTimer=SetTimer(NULL,1,5000,(TIMERPROC)TimeProc);
         m_nTimer=SetTimer(NULL,1,5000,(TIMERPROC)TimeProc);}
void CALLBACK TdmPdmToolsReg::TimeProc(UINT nIDEvent)
{// TdmPdmToolsReg *p=new TdmPdmToolsReg();
if (nIDEvent==m_nTimer)
{
AfxMessageBox("ok");
}
}运行出错:error LNK2001: unresolved external symbol "public: static unsigned int  TdmPdmToolsReg::m_nTimer" (?m_nTimer@TdmPdmToolsReg@@2IA)我查了一下资料,静态函数只能调用静态成员变量。但是调用的时候就会报错。注释掉的语句,是我试过的方式。但是都会在静态变量这里报错。大家指点一下:)

解决方案 »

  1.   

    你的static UINT m_nTimer定义在哪个类?有没有对其初始化?
      

  2.   

    好像TIMERPROC不是这个样子的呢 ??
    void CALLBACK TimerProc(
    HWND hwnd, 
    UINT uMsg, 
    UINT idEvent, 
    DWORD dwTime );
      

  3.   

    static UINT m_nTimer 就定义在TdmPdmToolsReg类中,
    然后在函数中直接用到:
    m_nTimer=SetTimer(NULL,1,5000,(TIMERPROC)
      

  4.   

    静态变量要初始化,不然编译器不认识。
    在.cpp中
    UINT TdmPdmToolsReg::m_nTimer=****;
      

  5.   

    静态变量必须要初始化,而且,初始化的位置不应该在成员函数内,而是应该在任何函数的外面(即花括号的外面),因为本质上静态变量也就是全局变量,或者可以称作一种特殊的全局变量。必须在全局域内首先对其初始化。
    //a.h
    class A{
    pulbic:
           A();
           ~A();
           static int a;
          void Showa();
    };//a.cpp
    int A::a = 0;//Initializevoid A::Showa()
    {printf("%d",a);}