2010-08-25 130 views
0

新手C++程序員再次在這裏C++中對象的多維數組,我無法初始化它!

我正在使用VC++ VS2008並嘗試創建一個數組數組。我希望存儲的所有對象都想放在堆上。

在數組中它只是指針。

下面是一些代碼:

Grid.h

#include "Tile.h" 

class Grid 
{ 
public: 
    Tile* grid_ptr[8][8]; 
... 
... 
}; 

Grid.cpp

#include "stdafx.h" 
#include "Grid.h" 

... 
... 
void Grid::Initialize() 
{ 
    for(int i = 0; i < 8; i++) 
    { 
     Grid::grid_ptr[i][0] = new Tile::Tile(10,10); 
     for (int j = 0; j < 8; j++) 
     { 
      Grid::grid_ptr[i][j] = new Tile::Tile(10,10); 
     } 

    } 
} 
... 
... 
} 

一切工作就好了,包括瓷磚施工。這似乎是看到了語法錯誤,因爲編譯器給了我這個

錯誤1錯誤C2061:語法錯誤:標識符「{構造函數}」

錯誤2錯誤C2061:語法錯誤:標識符「{構造函數}」

所有的時間都是同一個故事。這讓我的整個工作陷入了不幸的停頓狀態,我會非常欣賞這個解決方案。

總之。如何正確地創建一個大小爲8x8的數組,數組的大小充滿指向各自tile對象的指針?

這樣做甚至可能或聰明地使用這樣的內存?

介意我已經閱讀了很多這方面的例子,並且用整數或其他數據類型這樣做是成功的。這不過只是不希望我想分配

Tile.h這裏和Tile.cpp下面

class Tile 
{  
public: 

private: 
    enum TileOccupation 
    { 
     EmptyTile = 0, 
     WhiteSphere = 1, 
     BlackSphere = 2 
    }; 

    unsigned short horizontalDimensions; 
    unsigned short verticalDimensions; 

public: 
    Tile(); 
    Tile(unsigned short horizontalDimensions, unsigned short verticalDimensions); 
    ~Tile(); 

void Update(); 
void Draw(); 


}; 

> Tile.cpp 

#include "stdafx.h" 
#include "Tile.h" 

Tile::Tile() 
{ 

} 

Tile::Tile(unsigned short horizontalDimensions, unsigned short verticalDimensions) 
{ 

} 

void Tile::Update() 
{ 

} 

void Tile::Draw() 
{ 

} 
+0

new Tile :: Tile(10,10) - > new Tile(10,10); – DumbCoder 2010-08-25 11:37:24

+0

你能告訴我們'Tile'構造函數嗎? – Default 2010-08-25 11:38:17

+0

你的'Grid :: Initialize'代碼泄漏了8個'Tile'對象,因爲它是:'grid_ptr [i] [0]'獲得一個新對象兩次。只需要移除'Grid :: grid_ptr [i] [0] = new Tile :: Tile(10,10)''來解決這個問題。 – 2010-08-25 11:47:46

回答

3

你不想創建一個Tile::Tile(構造函數),你想創建一個Tile(一個對象) - 將new Tile::Tile更改爲new Tile

此外還有泄漏。刪除此:

Grid::grid_ptr[i][0] = new Tile::Tile(10,10); 

//編輯

也許你用動態數組(當尺寸是未知的,我們使用的)混淆。您的陣列是靜態的(展位尺寸),您不必爲其動態分配內存。它是你的課程的一部分,並且通過一個對象自動創建,就像例如簡單的int字段。

還有一個。考慮你是否真的需要動態創建切片。你會將瓷磚移入還是移出陣列? Tile是否大於幾個int?如果對於任何問題的答案是「否」,那麼靜態分配將適合您:

Tile grid_ptr[8][8]; 
+0

我還沒有專注於刪除它,但我知道它謝謝你。 你可以向我解釋一下使用這個範圍操作符的區別嗎? – Proclyon 2010-08-25 11:48:39

+0

時刻請:) – adf88 2010-08-25 11:49:51

+0

哇....錯誤消失了....編譯器錯誤記者的空白處。謝謝 ! 現在對於學習方面,我做錯了什麼? (是清理c的內存泄漏) – Proclyon 2010-08-25 11:50:27