2011-12-03 135 views

回答

8

不,因爲在scene被完全定義之前,編譯器不知道它有多大,也不知道該數組的大小。

但是,你可以有指針scene一個數組,因爲指針(不計指針成員和其他古怪 - 感謝納瓦茲)都是一樣的尺寸:

class scene { 
    scene* array[20]; 
}; 

或者,您也可以存儲的指針將指向與new[]分配並用delete[]解除分配一個動態數組:

class scene { 
    scene() : array(new scene[20]) { } 
    ~scene() { delete[] array; } 

    scene* array; 
}; 

或甚至更可替代地,存儲vector<scene>,一個scenevector S:

class scene { 
    vector<scene> array; 
}; 

,並與vector,你無需手動內存管理可調整大小的數組。

+1

不知道,我剛剛提出了兩個答案,一個以「是」開頭,另一個以「否」開頭。我覺得很蠢,但都是正確的:) –

+0

有人在觸發器上很快。我upvoted。 :) – DejanLekic

+0

@ MichaelKrelin-hacker我剛剛比Nawaz做了一個字面上的「array」字樣:) –

2

是的。你可以做到這一點。但你到成員聲明爲指針爲:

struct scene 
{ 
    //other members 

    scene *children; //this is what you need. 
         //you cannot make it like : scene children[100]; 
}; 

然後創建動態數組爲:

scene parent; 
parent.chidren = new scene[100]; //100 children! 

只要記住,你已經分配和釋放內存自己。可以使用std::vector<scene*>boost::ptr_vector<scene>

0

確實有可能。

僞代碼:

struct Scene { 
    int id; 
    Scene* scenes; 
}; 

PS。你可以輕鬆地測試這個 - 不要太懶。 ;)

0

如果您使用std::vector,則可以這樣做。這是我昨天寫的一些代碼:

#include <vector> 
struct ChangeList // Tree of changes in a tree of values 
    { 
    int index ; 
    std::vector<ChangeList> Changes ; 
    } ; 
相關問題