读书人

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

发布时间: 2012-02-12 17:16:34 作者: rapoo

类的一个问题,高手指教
编译器: 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;
}

读书人网 >C++

热点推荐