2012-08-30 4 views
1

GCC로 컴파일 문제는 다음과 같은 코드그램 ++ 배열 초기화

enum AVMediaType { 
    AVMEDIA_TYPE_UNKNOWN = -1, 
    AVMEDIA_TYPE_VIDEO, 
    AVMEDIA_TYPE_AUDIO, 
    AVMEDIA_TYPE_DATA, 
    AVMEDIA_TYPE_SUBTITLE, 
    AVMEDIA_TYPE_ATTACHMENT, 
    AVMEDIA_TYPE_NB 
}; 

static int wanted_stream[AVMEDIA_TYPE_NB]={ 
    [AVMEDIA_TYPE_AUDIO]=-1, // Line 234 
    [AVMEDIA_TYPE_VIDEO]=-1, 
    [AVMEDIA_TYPE_SUBTITLE]=-1, 
}; 

하지만 g ++에 잘 다음과 같은 오류 문제가 여기에 무엇

playerthread.cpp:234: error: expected primary-expression before '[' token 

을 던져 컴파일?

+0

'[AVMEDIA_TYPE_AUDIO]'가 평가되어야 할 것이 무엇인지 물어보십시오. 만약 그게 뭔가 값을 할당 할 수 있다면 ... – DevSolar

+0

그것은 그것이하는 일이 아닙니다. C99에서는이 구문을 사용하여 배열의 요소를 초기화 할 수 있습니다. – teppic

답변

1

이러한 종류의 지정된 초기화 프로그램은 g ++에서 지원하지 않지만 gcc를 사용합니다. 나는 이것이 C++ 표준에서 전혀 허용되지 않는다고 확신한다. 코드를 매우 단순하게 가져 오면 똑같은 것을 볼 수 있습니다 :

int array[10] = { [1] = 5 }; 

C++가 아니라 C에서 잘됩니다.

+0

이 기능에 대한 gcc의 설명서는 http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html을 참조하십시오. 이것은 [tag : c99]의 표준입니다. – ecatmur

+0

gcc는 -std = c89가 선택된 상태에서도 위의 내용을 컴파일합니다. – teppic

+0

어쩌면 내가 선언 * 후 * 배열을 초기화해야합니다. –