2012-03-31 155 views
0

我想知道是否有方法從結構中的變量初始化數組。假設你有一個像這個 -從結構初始化數組初始化

struct Test{ 
    int Number; 
}; 

一個struct和你想初始化INT 成爲一個數組。
我已經嘗試過這一點,這是行不通的:

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

我知道ISO C++禁止調整大小數組,但如果有初始化整數是一個數組的方式,這不是真正調整(不是嗎?) 此外,矢量不適用於結構。我得到一個「向量沒有命名爲」的錯誤。

P.S.,我不能做到這一點無論:

struct Test{ 
    int Number[5]; 
}; 

因爲在那個時候,我不知道我想要的數組的大小。

+0

int'怎麼會奇蹟般地變成一個數組?它至少需要一個'int *',但即使如此,你最好避開並查看'std :: vector <>'。 – ildjarn 2012-03-31 03:20:35

+0

@ildjarn沒錯,沒有。這隻適用於使用指針的情況。但我認爲'std :: vector <>'方法是一個更好的主意。謝謝 – Niro56 2012-03-31 03:28:36

回答

2

矢量作品就好在結構:

#include <vector> 

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

我不知道你真正想要做的,但我認爲這很接近。

+0

大聲笑我忘了添加'#包括'我的代碼! – Niro56 2012-03-31 03:26:43

+0

是的,那樣做。 – Sean 2012-03-31 03:30:02

0

您可以使用指針int - 即

struct Test{ 
    int *Number; 
}; 

然後你就可以在任何未來時間分配此指向您的首選大小的數組:

t.Number = new int[5]; 

但正如其他海報已經說過,std::vector,與一個小的「V」,工作正常;請務必#include <vector>,以便編譯器知道你在說什麼。

+0

是的,確實有效。非常感謝你! – Niro56 2012-03-31 03:26:19

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 2012-03-31 03:32:50

0

new int[3]返回值是一個int*不是int。爲了使你的代碼工作,你可以這樣做:

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; 
} 

但是你真的應該使用std::vector而不是靜態數組。向量在結構內工作得很好:

#include <vector> 

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

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

    return 0; 
}