2014-06-24 2 views
2

와 구조체의 배열은 좀 코드가 있습니다.컴파일러 오류 초기화 표준 : 그 소리

그 코드는 나에게이 오류 준다 그러나 :

std::array<JNINativeMethod, 26> methods = {{ 
    { "nativeCreate", "(Ljava/lang/String;)J", reinterpret_cast<void*>(&nativeCreate) }, 
    { "nativeDestroy", "(J)V", reinterpret_cast<void*>(&nativeDestroy) }, 
    ... 
    { "nativeToggleDebug", "(J)V", reinterpret_cast<void*>(&nativeToggleDebug) }} 
}}; 

이 나에게 이상한 것 같지만 Visual C++에 대한이 토론을 찾은 후 : http://social.msdn.microsoft.com/forums/vstudio/en-US/e5ad8fa5-c9e8-4328-a7fa-af7a47ce2492/initialising-a-stdarray-of-structs을 내가 괄호의 또 다른 세트를 추가하지 않는 한

jni/JNI.cpp:252:9: error: excess elements in struct initializer 
     { "nativeDestroy", "(J)V", reinterpret_cast<void*>(&nativeDestroy) }, 
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

이것이 잘못된 C++ 11 구문인지 또는 clang 3.4의 결함인지 알고 싶습니다.

는 그것이 Initializing simple structs using initializer lists with clang

답변

7

std::array 언급 버그 관련되어 배열을 포함하는 전체 클래스이며; 따라서 클래스 멤버 initialiser (s) 주위에 하나, 배열 요소 initialiser (s) 주위에 하나씩 두 쌍의 중괄호가 필요합니다.

C++ 14에서는이 요구 사항을 완화하여 중첩 된 배열 요소를 외부 initialser 목록에서 초기화 할 수 있다고 생각합니다.

+0

아를 명확히합니다. 그것은 C++의 감독이었던 것 같습니다. 재미있는 그들은 이미 다음 버전에서 시작됩니다. – ljbade