2010-05-17 60 views
-1
class B { 
public: 
    static int a; 
}; 
class C:B { 
}; 

我想通过任何继承的类使用变量,但是当我声明一个类时它有问题。如何:继承类中的静态变量

B::B() { 
    a=1; 
}; 

我做对了吗?
感谢您阅读并等待您的意见。

//我错过了分号,这不是我说的错误。 //这是我尝试delcare时发生的错误 class GameState { public: static int a = 1; // ... };

Error 7 error C2864: 'CGameState::a' : only static const integral data members can be initialized within a class d:\my dropbox\work\#today\gdimario\gdimario\gamestate.h 18 

我试着写一个简单的问题,它显示了我想要的问题,而不是粘贴我的整个代码。

+1

什么问题? , 如果我可以问。 – 2010-05-17 15:15:29

+1

你的错误意味着你正试图初始化类声明中的静态成员(即你有'static int a = 123;')。你只能这样做,如果它也是'const'。 – Inverse 2010-05-17 16:46:37

+0

@Inverse:Thanks :) – nXqd 2010-05-17 17:55:10

回答

5

您可以像派生类和基类一样直接使用它。

也许你的错误是你的类声明结尾没有分号?

class B { 
public: 
    static int a; 
}; 

class C:B { 
}; 

如果你想从一个C的实例调用它,那么你需要使用公有继承(如果指定私有继承假设没有)

class C : public B { 
}; 

要初始化你需要做的这个(通常在你相应的.cpp文件中的顶部):

int B::a = 3; 
+0

它不应该是'C :: B'吗? – ereOn 2010-05-17 15:31:38

+0

@ereOn:你的意思是? – 2010-05-17 18:21:21

+0

没关系......睡不够;) – ereOn 2010-05-18 06:32:29

3

您需要在CPP文件中写入:

int B::a; 

并添加Brad建议的分号。 (你甚至编译过你的代码吗?编译器说了什么?)

+0

他真的可以在班**定义**中写这个吗? 'a'不是'const',只是'static'。 – ereOn 2010-05-17 15:21:51

+0

@ereOn我不确定,但我认为初始化部分是因为成员变量是静态的 - 不仅是常量。 – 2010-05-17 15:25:52

+1

@ereOn是“static int a = 1;”只是给它一个初始值。它不是“常量”的事实意味着价值可以稍后改变。 – eemz 2010-05-17 15:44:45

0

我想你会得到链接错误。因为您尚未在.cpp文件中定义静态变量,因此请使用以下代码: 。

e.g. 

//hearer file 
class X{ 

public : static int a ; 

} 
//impl file 

int X::a(0); 

....或...

对于你也可以定义静态变量整体式的时候都宣称像:

类X {

public : static int a = 0; 

} 
+1

只有'const'静态成员可以直接在类定义中提供一个初始化器。另外,即使它有一个初始化器,它仍然不是一个定义。 – AnT 2010-05-17 16:14:11