类的一个有关问题,高手指教

类的一个问题,高手指教
编译器:     vc6.0
程序如下:

#include   <iostream.h>

class   CTest
{
protected:
static   int   m_hInstance;
public:
static   void   SetInstance(   int   h)
                {   m_hInstance=h;}

};

int   main()
{
        int   h=1024;
        CTest::SetInstance(   h   );
        return   0;
}

编译通过,但连接有如下warning:unresolved   external   symbol   "protected:   static   int   CTest::m_hInstance "。如果将   m_hInstance=h   去掉就可以连接运行。

问:   CTest   没有建立对象     CTest::SetInstance(   h   )怎能通过编译?
          函数的STATIC   在这里有什么作用,去掉后就无法通过编译?

谢谢!

------解决方案--------------------
去查C++ Primer,类内的static成员。
------解决方案--------------------
CTest::SetInstance( h );
============
如果那不是一个静态函数,你调用的时候,需给出个类对象的啊,
只有静态函数不属于任何一个具体的类对象,而属于类本身,当然每个具体的类对象也可以调用它
------解决方案--------------------
//类的静态数据成员必须在类外面进行定义,如下
#include <iostream>
using namespace std;

class CTest
{
public:
static void SetInstance( int h)
{
m_hInstance = h;
}
protected:
static int m_hInstance ;
};

int CTest::m_hInstance; //在这里定义类的静态数据成员

int main()
{
int h = 1024;

CTest::SetInstance( h );

return 0;
}


------解决方案--------------------
#include <iostream>
using namespace std;

class Test
{
public:
static int m_h;
public:
static void set(int i)
{
m_h=i;
}
};

int Test::m_h=0;

int main()
{
Test::set(5);
cout < <Test::m_h < <endl;
}