2012-03-31 4 views
0

구조체의 변수에서 배열을 초기화하는 방법이 있는지 궁금합니다. 당신이 this-구조체의 배열 초기화

struct Test{ 
    int Number; 
}; 

같은 구조체가 말 그리고 당신은 배열되기 위해 INT 를 초기화하고 싶었다.
나는 이미 시도했습니다, 그것은 작동하지 않습니다

Test t1; 
t1.Number = new int[3]; 
t1.Number[3] = 6; 

을 내가 ISO C++가 배열의 크기를 조정 금지 알고 있지만 배열로 정수를 초기화 할 수있는 방법이 있다면, 그건 정말 크기 조정이 아니다 (그렇지 않습니까?) 또한 벡터는 구조체 내부에서 작동하지 않습니다. "벡터 이름을 지정하지 않습니다"오류가 발생합니다.

P., 나는이 작업을 수행 할 수 있습니다 :

struct Test{ 
    int Number[5]; 
}; 

그 시간에 내가 원하는 배열의 크기를 모르기 때문에

.

#include <vector> 

struct Test { 
    std::vector<int> Numbers; 
}; 

난 당신이 정말 뭘 하려는지 모르겠지만 난이 가깝게 생각 :

+0

어떻게 'int'가 마술처럼 배열이 될 수 있습니까? 적어도 int *이어야 할 필요가 있습니다. 그러나 그렇다고하더라도 여러분은 최선을 선택하고 대신에 std :: vector <>를보아야합니다. – ildjarn

+0

@ildjarn 맞습니다. 그렇지 않습니다. 그것은 포인터를 사용하는 경우에만 작동합니다. 하지만 'std :: vector <>'접근법이 더 좋은 아이디어라고 생각합니다. 감사합니다 – Niro56

답변

2

벡터 구조체에서 잘 작동합니다.

t.Number = new int[5]; 

: 원하는 크기의 배열을 가리 키도록 즉,

struct Test{ 
    int *Number; 
}; 

이 그럼 당신은 미래의 시간이 할당 할 수 있습니다 -

+0

LOL '#include '을 (를) 내 코드에 추가하는 것을 잊어 버렸습니다! – Niro56

+0

그래, 그렇게 할거야. – Sean

0

당신은 포인터int로 사용할 수 있습니다 그러나 다른 포스터가 이미 말했듯이, std::vector은 작은 "v"로 잘 작동합니다. #include <vector>으로 컴파일러가 당신이 말하는 것을 알고 있는지 확인하십시오.

+0

예, 작동합니다. 고마워요! – Niro56

0

하나의 트릭은 구조체를 초기화 할 때이

struct Test { 
    int Numbers[1]; 
}; 

, 당신은 당신의 자신의 할당 기능을 사용할 필요가해야 할 일.

struct Test *NewTest(int sizeOfNumbers) { 
    return (struct Test*)malloc(sizeof(struct Test) + sizeof(int)*(sizeOfNumbers - 1)); 
} 

다음, 당신은

struct Test *test1 = NewTest(10); 
test1->Numbers[0]... 
test1->Numbers[1]... 
test1->Numbers[9]... 
+0

완벽! 그것이 내가 필요한 것입니다. – Niro56

0

new int[3]의 반환 값이 int* 아닌 int이며, 사용하여 번호를 액세스 할 수 있습니다. 당신의 코드가 작동하려면 당신이 할 수있는 당신이 정말로 정적 배열이 아닌 std::vector를 사용해야하지만

struct Test { 
    int* Number; 
}; 

int main() { 
    Test t1; 
    t1.Number = new int[4]; // Note this should be 4 so that index 3 isn't out of bounds 
    t1.Number[3] = 6; 
    delete t1.Number; 

    return 0; 
} 

. 벡터는 구조체 내부에서 잘 작동합니다.

#include <vector> 

struct Test { 
    std::vector<int> Number; 
}; 

int main() { 
    Test t1; 
    t1.Number.resize(4); 
    t1.Number[3] = 6; 

    return 0; 
}