2010-08-25 5 views
0

Rookie C++ Programmer ici encoreTableau multidimensionnel d'objet en C++, je ne peux pas l'initialiser!

J'utilise VC++ VS2008 et tente de créer un tableau de tableaux. Tous les objets que je souhaite stocker, je veux mettre sur le tas.

Dans les tableaux, tout est juste des pointeurs.

Voici quelques code:

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); 
     } 

    } 
} 
... 
... 
} 

Tout fonctionne très bien, y compris la construction de tuiles. Il semble comme une erreur de syntaxe car le compilateur me donne cette

Erreur 1 erreur C2061: erreur de syntaxe: identificateur « {cteur} »

Erreur 2 Erreur C2061: erreur de syntaxe: identificateur « {cteur} »

Tout le temps la même histoire. Tout mon travail s'est enlisé et malheureusement j'apprécierais une solution à ce problème.

En bref. Comment créer correctement un tableau de tableaux de taille 8x8 rempli de pointeurs référençant leurs objets de pavé respectifs?

Est-ce encore possible ou intelligent d'utiliser une telle mémoire?

que j'ai lu beaucoup d'exemples à ce sujet, et que cela a été un succès avec des entiers ou d'autres types de données. Cela est cependant veut pas simplement que je veux alloué

Tile.h ici et Tile.cpp ci-dessous

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

nouvelle tuile :: Carreaux (10,10) -> nouvelle tuile (10,10); – DumbCoder

+0

Pourriez-vous nous montrer le constructeur 'Tile'? – Default

+0

Votre code 'Grid :: Initialize' contient huit objets' Tile' tels quels: 'grid_ptr [i] [0]' obtient un nouvel objet deux fois. Supprimez simplement la ligne 'Grid :: grid_ptr [i] [0] = new Tile :: Tile (10,10);' pour corriger cela. –

Répondre

3

Vous ne voulez pas créer un Tile::Tile (un constructeur), vous voulez pour créer un Tile (un objet) - remplacez new Tile::Tile par new Tile.

En plus il y a une fuite. Supprimer le:

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

// EDIT

Probablement vous confondre avec des tableaux dynamiques (l'une que nous utilisons quand les dimensions ne sont pas connus). Votre tableau est statique (dimensions de la cabine) et vous n'avez pas à allouer dynamiquement de la mémoire pour cela. Il fait partie de votre classe et est créé automatiquement avec un objet, de la même manière que par exemple. champ simple int.

Et un de plus. Considérez si vous devez vraiment créer des tuiles dynamiquement. Voulez-vous déplacer des tuiles dans et hors de la matrice? Est-ce que le Tile est plus grand que quelques-uns?Si la réponse est « non » pour toute question alors l'allocation statique sera bien pour vous:

Tile grid_ptr[8][8]; 
+0

Vous ne vous êtes pas encore concentré sur la suppression mais je suis conscient de cela merci. Pouvez-vous m'expliquer la différence en utilisant cet opérateur de portée? – Proclyon

+0

moment s'il vous plaît :) – adf88

+0

Wow .... l'erreur est partie .... Espace blanc dans le reporter d'erreur de compilation. Je vous remercie ! Maintenant, pour l'aspect apprentissage, qu'est-ce que j'ai fait de mal? (Oui, nettoyage de la fuite de mémoire, etc.) – Proclyon

Questions connexes