2012-01-08 4 views
3
struct comp { 
    long a; 
    vector<int> b(9); 
    bool c; 
}; 

오류 :구조체의 벡터 멤버를 선언하는 동안 왜 초기화 할 수 없습니까?

code.cpp:67:19: error: expected identifier before numeric constant 
code.cpp:67:19: error: expected ‘,’ or ‘...’ before numeric constant 

이 어떤 문제가 있습니까? b에 9 개의 요소가 있다고 g ++이 받아들이지 않는 이유는 무엇입니까?

+0

왜 C++ 표준에서 이것을 허용하지 않는지 묻고 있습니까? –

+0

예,하지만 생성자를 사용하지 않고이 작업을 수행하는 또 다른 구문이 있습니까? – Lazer

답변

10

C++이 그렇게 작동하지 않기 때문입니다.

초기화 프로그램은 초기화 프로그램 목록의 생성자로 들어갑니다.

struct comp { 
    long a; 
    vector<int> b; 
    bool c; 

    comp() : b(9) { } 
}; 

(따라서 정의되는 클래스가 더 이상 집계 유의 없다.)

참고 :

struct Foo { 
    int a = 5; 
    vector<char> b = vector<char>(8); 
}; 
: C++ 11 부재 이니셜 있지만 복사 초기화 구문을 사용하여 추가

이 문제에 대한 컴파일러 지원은 여전히 ​​불완전합니다.

+0

텍스트는 순수한 악마입니다. 우리의 눈을 동정하십시오. –

+0

동의 및 수정 됨. –

0

vector<int> b(9);은 구체적인 데이터 구조입니다. 실제 데이터 구조가 아닌 유형 및 레이블을 찾고 있습니다. vector<int> b; 만 있으면됩니다.

관련 문제