被声明为静态类成员的C++类
问题描述:
使用静态成员(它是头中的另一个类)声明类时是否存在任何问题?例如:被声明为静态类成员的C++类
class Stat
{
public:
int avar;
Stat();
};
class Test
{
public:
static Stat stat;
};
我担心它可能会导致问题的原因是,它似乎非常类似于在头中声明全局变量。如果包含在两个cpp文件中,则会在两个文件中声明全局,从而导致错误。
上面例子中的'stat'仍然需要在两个cpp文件之间创建一次,这与全局相同,所以编译器如何处理一种情况而不是另一种,或者它不能做到的答案?
答
你只声明在类中类的静态成员变量,你必须它分别在CPP文件中定义:
Stat Test::stat;
所以没有编译器或链接错误。头文件中的声明只是指cpp文件中的定义。
在全局变量而言,该声明等同于:
extern int global;
而且定义等同于:
int global;
这些__CLASS定义,不declarations__。 'Test :: stat',无论如何,只是一个__member声明___,仍然需要定义。 (见[这个答案](http://*.com/questions/1410563/what-is-the-difference-between-a-definition-and-a-declaration/1410632#1410632)什么是声明和定义C++。) – sbi 2010-07-21 11:18:13