2010-05-17 6 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

어떤 문제? , 내가 만약 물어 본다면. –

+1

오류는 클래스 선언 내에서 정적 멤버를 초기화하려고한다는 것을 의미합니다 (예 :'static int a = 123;'). 'const' 인 경우에만 이것을 할 수 있습니다. – Inverse

+0

@Inverse : 감사합니다 :) – nXqd

답변

5

파생 클래스와 기본 클래스에서 모두 사용한 것처럼 직접 사용할 수 있습니다.

아마도 클래스 선언 끝에 세미콜론이 없다는 오류가 있습니까? (아무 것도 지정 개인 상속을지지 않습니다 경우)

class C : public B { 
}; 

은 당신이해야 할 초기화하려면 : 당신이 C의 인스턴스에서 호출 할 경우

class B { 
public: 
    static int a; 
}; 

class C:B { 
}; 

는 공용 상속을 사용할 필요가 이 (당신의 해당 .CPP 파일의 일반적으로 상단) :

int B::a = 3; 
+0

'C :: B'도 안됩니까? – ereOn

+0

@ereOn : 당신은 어디에 있습니까? –

+0

신경 쓰지 마라. 충분히 잠을 자지 않았다.) – ereOn

3

당신은 CPP 파일에 작성해야합니다 :

int B::a; 

브래드가 제안하는 세미콜론을 추가하십시오. 컴파일러는 무엇을 말 했습니까?

+0

그는 이것을 클래스 ** 정의 **에 실제로 쓸 수 있습니까? 'a'는'const'가 아니고 단지'static'입니다. – ereOn

+0

@ereOn 잘 모르겠습니다 만 멤버 변수가 상수이기 때문에 초기화 부분이 정적이라고 생각합니다. –

+1

@ereOn 예 "static int a = 1;" 그냥 초기 값을줍니다. "const"가 아니라는 사실은 나중에 값을 변경할 수 있음을 의미합니다. – eemz

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

관련 문제