2014-10-29 3 views
0

다음과 같이 구조체를 정의했습니다. 청크 정의 std :: 구조체의 벡터 정의

extern int x; 
a = 1; 
b = 2; 
x = a*b; 
struct bStruct 
{ 
    unsigned long Cycles;      
    unsigned long Time;           
    std::vector<unsigned long> Chunks(x); 
}; 

하지만 x

는 아래 적색 라인 에러로 기록된다.

오류 메시지는 다음과 같습니다

변수는 "X"가 아닙니다 유형 이름.

왜이 오류가 발생했으며 어떻게 수정합니까?

std::vector<unsigned long> Chunks(x); 
      |    |  | 
      |    |  +---Wait a sec huh ? what type is 'x' ?? 
      |    | 
      |    +---------Function name Chunks 
      +----------Return Type std::vector<unsigned long> 

당신은 Chunks이 사용 초기화 할 필요가 데이터 멤버가되고 싶어요 :

+0

을'표준 : : 벡터 <부호 없음 long> 덩어리 (X)는, '당신은 무엇을해야할까요? 벡터의 크기를 x로 설정 하시겠습니까? C++ 98을 사용한다면 하나의'int' 인자를 가진 생성자가 없으며이'std :: vector Chunks (x, 0);를 시도하거나 bStruct의 생성자에서이 벡터를 초기화 할 수 있습니다. –

+3

[book] 얻기 (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). StackOverflow를 통해 C++을 배울 수 없습니다. –

+0

도움이되는 의견에 감사드립니다. 나는 그 책들을 조사 할 것이다. – goosli

답변

4

귀하의 컴파일러는 Chunks 지금처럼 구문 분석하는 기능이라고 생각

struct bStruct 
{ 
    unsigned long Cycles;      
    unsigned long Time;           
    std::vector<unsigned long> Chunks; 

    bStruct() : Chunks(x) 
    { 
     // Constructor 
    } 
}; 
+0

답변 해 주셔서 감사합니다. 그것은 작동합니다! 나는 C++에 매우 익숙하다. 그래서 나와 함께 견뎌야한다. 몇 가지 질문이 더 있습니다. 1 bStruct()에 대괄호가있는 이유는 무엇입니까? 덩어리입니까? 왜 그것이 bStruct()가 아닌지. 청크? 2 x 대신 std :: vector (x)를 사용하는 이유는 무엇입니까? 3 결국 중괄호 사용법은 무엇입니까? 감사! – goosli

+0

여기서 마지막 줄은'bStruct'의 생성자를 정의합니다.이 생성자는 초기화 목록 ([here] (http : // ko)를 참조하십시오)을 사용하여'Chunks'를'std :: vector .cppreference.com/w/cpp/language/initializer_list), 초보자를위한 설명이 더 있음) – Dettorer

+2

인수가없는 기본 생성자입니다. ':'이 초기화 목록이고, 이것은'bStruct'의 변수'Chunks'가 std :: vector (x)로 시작한다는 것을 의미합니다. 그리고'{}'는 생성자의 빈 몸체입니다. 그것은'bStruct() {Chunks = std :: vector (x);와 같습니다. } ' –

1

std::vector<unsigned long> Chunks(x); 컴파일러는 청크를 변수가 아닌 함수로 처리합니다. 구조체 멤버의 초기화가 struct (클래스) 정의에 허용되지 않습니다. 는 건설 기능을 사용하여 문제를 해결할 수 : 문자열로

struct bStruct 
{ 
    unsigned long Cycles;      
    unsigned long Time;           
    std::vector<unsigned long> Chunks; 
    bStruct(int x):Chunks(x) {}; 
}; 
+0

감사! 나는 C++에 매우 익숙하다. 그래서 나와 함께 견뎌야한다. 몇 가지 질문이 더 있습니다. 1 bStruct()는 무엇을 의미합니까 : Chunk는 무엇을 의미합니까? 2 청크의 크기가 왜 std :: vector (x)가 아닌 x일까요? 3 결국 중괄호 사용법은 무엇입니까? 고마워요! – goosli

+0

@goosli 초기화 목록이 할당 초기화보다 유용합니다. – wangsquirrel