2010-08-25 2 views
0

Rookie C++ Programmer здесь сноваМногомерный массив объекта в 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.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

новая плитка :: Плитка (10,10) -> новая плитка (10,10); – DumbCoder

+0

Не могли бы вы показать нам конструктор 'Tile'? – Default

+0

Ваш код 'Grid :: Initialize' пропускает восемь объектов' Tile': 'grid_ptr [i] [0]' дважды получает новый объект. Просто удалите строку 'Grid :: grid_ptr [i] [0] = new Tile :: Tile (10,10);', чтобы исправить это. –

ответ

3

Вы не хотите, чтобы создать Tile::Tile (конструктор), вы хотите для создания Tile (объект) - изменить new Tile::Tile на new Tile.

Кроме того, есть утечка. Удалить это:

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

// EDIT

Вероятно, вы путать с динамическими массивами (тот, который мы используем, когда размеры неизвестны). Ваш массив статичен (размеры стенда), и вам не нужно динамически выделять для него память. Он является частью вашего класса и создается автоматически с помощью объекта, так же, как, например, простой int раздел.

И еще один. Подумайте, действительно ли вам нужно создавать плитки динамически. Будете ли вы перемещать плитки в и из массива? Является ли Tile больше, чем несколько int `s?Если ответ «нет» на любой вопрос, то статическое распределение будет хорошо для вас:

Tile grid_ptr[8][8]; 
+0

Е. Я не сосредоточился на его удалении, но я знаю об этом, спасибо. Можете ли вы объяснить мне разницу, используя этот оператор сферы? – Proclyon

+0

момент пожалуйста :) – adf88

+0

Ничего себе .... ошибка ушла .... Белое пространство в репортере ошибки компилятора. Спасибо ! Теперь для аспекта обучения, что я сделал неправильно? (Да очистка утечки памяти из c) – Proclyon

Смежные вопросы