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