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:语法错误:标识符“{ctor}”
错误 2 错误 C2061:语法错误:标识符“{ctor}”
一直都是同一个故事。不幸的是,这让我的整个工作陷入停顿,我非常感谢对此的解决方案。
简而言之。如何正确创建一个大小为 8x8 的数组,其中填充了引用各自图 block 对象的指针?
这样使用内存是否可行或明智?
请记住,我确实阅读了很多关于此的示例,并且使用整数或其他数据类型这样做是成功的。然而,这根本不是我想要分配的
Tile.h here and Tile.cpp below
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()
{
}
最佳答案
你不想创建一个Tile::Tile
(一个构造函数),你想创建一个Tile
(一个对象)——改变new Tile::Tile
到 new Tile
。
此外还有漏水。删除这个:
Grid::grid_ptr[i][0] = new Tile::Tile(10,10);
//编辑
您可能对动态数组(我们在维度未知时使用的数组)感到困惑。您的数组是静态的(展位尺寸),您不必为其动态分配内存。它是您类(class)的一部分,并且是使用对象自动创建的,就像例如简单的 int
字段。
还有一个。考虑一下您是否真的必须动态创建图 block 。您会将瓷砖移入和移出阵列吗? Tile
是否比几个 int 大?如果任何问题的答案都是“否”,那么静态分配对您来说就可以了:
Tile grid_ptr[8][8];
关于c++ - C++中的多维对象数组,我无法初始化它!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3565316/