我的任務是創建一個可以容納遊戲中所有對象的數組。 不幸的是,所有這些對象都是在不同的地方創建的 - 將它們手動放入一個數組中會很乏味 - 事實上,如果它們在創建它們的地方,我會感覺更好,但是對它們的引用存儲在一個數組..指針形式的引用。
所以,這就是我想通了,到目前爲止,我已經做了這麼指向對象的每個實例都加入到在構造函數中的數組,如下所示:
const int GAME_MAX_ENTS = 65536;
class Object
{
public:
static Object* list[GAME_MAX_ENTS];
char type[64] = "ENT_OBJECT";
Object();
~Object();
};
Object::Object()
{
for (int i = 0; i < GAME_MAX_ENTS; i++)
{
if (!list[i])
{
list[i] = this;
break;
}
}
}
Object* Object::list[GAME_MAX_ENTS];
現在,我的問題是, - 當我試圖查看該列表並在與創建對象不同的範圍中顯示'type'的值時,它會彈出廢話 - 我假設它是隨機存儲器輸出。
下面是我的部分試圖彈出正確的信息:
static void OnRender()
{
//Grid
SDL_RenderClear(renderer);
//Draw objects
for (int i = 0; i < GAME_MAX_ENTS; i++)
{
if (Object::list[i])
{
Object* obj = Object::list[i];
printf("%s\n", obj->type);
}
}
[...]
..並讓一切儘可能明確,這裏就是我創建的對象的部分 - 提個醒,瓷磚就是一個類繼承從對象:
static void Initialize()
{
[...]
Tile tile;
Object obj;
}
我相當肯定這一切都因爲我沒有與C++的經驗,我只是一個Web開發/ C#擦洗 - 不要去硬對我^^
'Object obj;'是'Initialize'的本地對象。即使它將自己註冊到指針數組中,它仍然會在函數結束時超出範圍。 –
這將是值得添加一個析構函數''對象'從數組中刪除'this' –
C++的標準建議是使用'std :: vector'而不是數組。然後,您只需'push_back'新項目,而無需設置最大大小或掃描空閒插槽。 –