2009-09-03 15 views
12

나는이 일을 제대로 수행하는 방법을 알지 못한다. - 내가 (열거 형의 값에 해당하는 텍스트) 일부 상수를 저장하는 데 필요한 클래스가 나는 내 수업 시간에 (공개적으로)이 같은 선언이 있습니다문자열의 정적 배열 초기화 (C++)?

const static char* enumText[]; 

그리고 나는 그것을 초기화하기 위해 노력하고있어 같은 :

const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" }; 

그러나 GCC는 나에게 다음과 같은 오류 제공 :

'const를 숯불 * MyClass에 :: enumText은 []' 'MyClass 클래스'

무엇 오전의 정적 멤버가 아닙니다 내가 잘못하고있어? 감사!

+0

시도해보십시오. static const char * enumText []; 수업에? –

+0

필자는 이것이'static const char * []'대신에'const static char * []'을'static char * [] const'로 잘못 취급하는 구형 g ++ 버전이라고 생각합니다. "이상한"장소). –

+0

문제를 보여주는 답안에 완벽하고 편집 가능한 코드 조각을 붙여 넣을 수 있습니까? – sbi

답변

13

이 코드는 컴파일 :

struct X { 
    static const char* enumtext[]; 
}; 

const char* X::enumtext[] = { "A", "B", "C" }; 

이 코드를 확인하고 차이점을 찾을 수 있습니다. 클래스의 정적 속성을 정의하지 않았거나 헤더를 포함하지 않았거나 이름을 잘못 입력했다고 생각할 수 있습니다. 나는 추측을해야한다면

class MyClass 
{ 
const static char* MyClass::enumText[]; 
}; 
const char* MyClass::enumText[] = { "A", "B", "C", "D", "E" }; 

, 나는 당신의시 초기화 라인은 별도의 소스 파일에 있음을 말하고 싶지만, 당신은 잊었 :

+9

5 번 줄에는'X :: enumtext'가 있어야합니다. 그렇지 않으면 새로운 변수를 작성하는 중입니다. –

+0

그 대답은 오타였습니다. 나는 그것을 바로 잡았습니다. 어쨌든, 코드는 gcc로 컴파일됩니다 (맥 오에스 4.0과 우분투 4.3). –

+0

우o 멍청한 느낌이 들었습니다. 나는 눈치 채지 못했던 오타가있었습니다. –

1

컴파일러가 말한 것처럼 enumText라는 const char * 배열이 될 MyClass의 정적 멤버를 정의하려고합니다. 클래스에 선언이 없다면 문제가있는 것입니다.

class MyClass 
{ 
    //blah 
    static const char* enumText[]; 
}; 

또는 어쩌면 당신은 정적 멤버를 원하는 did'nt :

당신은 있어야합니다. 그렇지 않다면 이름에 클래스를 사용할 필요가 없습니다.

어쨌든, 배열 초기화와 관련이 없습니다.

+0

Op는 "내 수업에서 이것을 공개적으로 선언했습니다"라고 말했습니다. – snarf

+0

@Snarfblam :하지만 종종 OP가 말한 것과 현실은 서로 다른 두 가지입니다. –

1

다음 코드는 VS 2005 년 나를 위해 잘 컴파일 # MyClass가 들어있는 .h 파일을 #include합니다. 그게 바로 제가 망쳐 놓고 항상하는 일입니다.

또한, 당신이 잘못된 지점에 const가 있거나 (그 중 충분하지 않은 것 같습니다) 꽤 나을 것 같습니다. 당신이 지금 가지고있는 방식, 그것은 상수 인 배열이나 배열의 포인터가 아닙니다. 그 안에있는 문자 요소들뿐입니다.

6

이 GCC 버전 4.0.1로 컴파일 :

g++ -Wall -Wextra -pedantic s.cc -o s 

당신이 MyClass에::enumText이 바로 클래스를 참조하고 있는지 위치 :

#include <iostream> 

class MyClass { 
public: 
    const static char* enumText[]; 
}; 

const char* MyClass::enumText[] = { "a", "b", "c" }; 

int main() 
{ 
    std::cout << MyClass::enumText[0] << std::endl; 
} 

함께 컴파일?

2

오류 메시지가 표시되면 그 안에 선언 된 enumText []가없는 어딘가의 다른 헤더에있는 MyClass이라는 선언이있는 것 같습니다. 오류 메시지는 컴파일러가 MyClass에 대해 알고 있지만 enumText 구성원에 대해 알 수 없음을 나타냅니다.

나는 그림자에 잠복하는 MyClass이라는 다중 선언이 있는지 살펴볼 것입니다.

wintermute's 또는 T.E.D.'s 예제를 컴파일 할 수 있습니까?