2010-08-25 81 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