2013-11-09 3 views
8

다음 코드는 컴파일되지 않습니다에 배열을 명시 적으로 초기화를 지정할 수 없습니다 :해결 방법 :이해야하는 동안 비주얼 스튜디오 2013와 비주얼 스튜디오 2013

class A 
{ 
    A() :m_array{ 0, 1, 2 } {} // error C2536: 'A::A::m_array' : cannot specify explicit initializer for arrays 
private: 
    int m_array[3]; 
}; 

은 자세한 내용은 bug report를 참조하십시오.

가능한 해결 방법은 무엇입니까?

+1

선언 시점에서 초기화가 작동합니까? 'int m_array [3] {1,2,3};'? – juanchopanza

+0

'std :: array'는 작동합니까? 컴파일러가 C++ 14에서 총을 뛰지 않는 한 별도의 중괄호가 필요합니다. –

+0

@juanchopanza : VC++ 2013과 동일한 오류가 발생했습니다. – Korchkidu

답변

10

의견으로는이 해결 방법을 시도 할 수 있습니다.

class A 
{ 
    A() : m_array ({ 0, 1, 2 }) {} 
private: 
    std::array<int, 3> m_array; 
}; 

VS2013 잘 std::array 생성자 초기화 목록을 만든 것 같다 당신은 생성자의 intializer에서 초기화 할 수 있습니다

. 당신이 작성한 코드는 유효하며 gcc와 clang이이를 지원합니다. VS2013은 부족합니다.

+4

VS2013에서 컴파일하기 위해 생성자에서 여분의 괄호 쌍을 사용해야했습니다. A() : m_array ({{0, 1, 2}}) – SamuelMS