2010-07-21 90 views
1

使用静态成员(它是头中的另一个类)声明类时是否存在任何问题?例如:被声明为静态类成员的C++类

class Stat 
{ 
public: 
    int avar; 
    Stat(); 
}; 

class Test 
{ 
public: 
    static Stat stat; 
}; 

我担心它可能会导致问题的原因是,它似乎非常类似于在头中声明全局变量。如果包含在两个cpp文件中,则会在两个文件中声明全局,从而导致错误。

上面例子中的'stat'仍然需要在两个cpp文件之间创建一次,这与全局相同,所以编译器如何处理一种情况而不是另一种,或者它不能做到的答案?

+1

这些__CLASS定义,不declarations__。 'Test :: stat',无论如何,只是一个__member声明___,仍然需要定义。 (见[这个答案](http://stackoverflow.com/questions/1410563/what-is-the-difference-between-a-definition-and-a-declaration/1410632#1410632)什么是声明和定义C++。) – sbi 2010-07-21 11:18:13

回答

4

的答案是,你在声明静态的(像你可以声明一个全球)。 但你应该只在cpp文件中定义它。

在.h:

extern int myGlobal; 
class A 
{ 
    static int myStaticMember; 
}; 

在一个.cpp:

int myGlobal = 42; 
int A::myStaticMember = 42; 
+0

我想你的意思是'A :: myStaticMember' – Gianluca 2010-07-21 12:03:51

+0

谢谢,编辑。 – Scharron 2010-07-21 12:15:29

4

你只声明在类中类的静态成员变量,你必须它分别在CPP文件中定义

Stat Test::stat; 

所以没有编译器或链接错误。头文件中的声明只是指cpp文件中的定义。

在全局变量而言,该声明等同于:

extern int global; 

而且定义等同于:

int global;