Многомерный массив объектов в C ++, я не могу его инициализировать! - PullRequest
0 голосов
/ 25 августа 2010

Rookie 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, заполненный указателями, ссылающимися на соответствующие объекты мозаики?

Это вообще возможно или разумно сделать, используя такую ​​память?

Имейте в виду, что я прочитал множество примеров по этому поводу, и это было успешно с целыми числами или другими типами данных. Это, однако, просто не хочу, я хочу выделить

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()
{

}

1 Ответ

3 голосов
/ 25 августа 2010

Вы не хотите создавать 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];
...