IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

pointeur d'objet en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 1
    Par défaut pointeur d'objet en c++
    bonjour j'ai un problème avec les pointeurs.
    je fais un jeu spaceinvaders pour apprende.

    voici mon code avant, celui-çi compile et s'exécute bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    CSpriteBase cInvadersBase[2][8];
    CSprite cInvadersSprite[2][8];
     
    for(int i = 0; i < 2; i++ )
    	{
    		for(int y = 0; y < 8; y++)
    		{
    			cInvadersBase[i][y].init("Data/");
    			cInvadersSprite[i][y].init(&cInvadersBase[i][y],back);
      			cInvadersSprite[i]   [y].set(usiSprite_ACoordX1,usiSprite_ACoordY1);
      			cInvadersSprite[i][y].setSpeed(0);
    			cInvadersSprite[i][y].hitAndDestroyed = 0;
    		}
     
    	}
    maintenant voici la version modifiée avec pointeur d'objets
    celui-çi compile, mais plante à l'exécution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    CSpriteBase* cInvadersBase[2][8]
    CSprite* cInvadersSprite[2][8]
    for(int i = 0; i < 2; i++ )
    	{
    		for(int y = 0; y < 8; y++)
    		{
    			cInvadersBase[i][y]->init("Data/");
    			cInvadersSprite[i][y]->init(cInvadersBase[i][y],back);
      			cInvadersSprite[i] y]->set(usiSprite_ACoordX1,usiSprite_ACoordY1);
      			cInvadersSprite[i][y]->setSpeed(0);
    			cInvadersSprite[i][y]->hitAndDestroyed = 0;
    		}
     
    	}
    je crois que j'ai oublier quelque chose ou celà est juste une erreur de syntaxte. en tout les cas merci de répondre si vous avez une idée.

  2. #2
    Membre expérimenté Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Par défaut
    Hello,
    en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CSpriteBase* cInvadersBase[2][8]
    CSprite* cInvadersSprite[2][8]
    tu créé des vecteurs de pointeurs qui pointent vers... rien du tout. Il te faut soit les allouer ( avec un new, à ajouter dans la double boucle ), soit les faire pointer vers un object valide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    for(int i = 0; i < 2; i++ )
    {
    for(int y = 0; y < 8; y++)
    {
    cInvadersBase[i][y] = new CSpriteBase();
    cInvadersSprite[i][y] = new CSprite();
    cInvadersBase[i][y]->init("Data/");
    cInvadersSprite[i][y]->init(cInvadersBase[i][y],back);
    cInvadersSprite[i] y]->set(usiSprite_ACoordX1,usiSprite_ACoordY1);
    cInvadersSprite[i][y]->setSpeed(0);
    cInvadersSprite[i][y]->hitAndDestroyed = 0;
    }
     
    }
    Ca devrait marcher comme ca. N'oublie pas de les desallouer ensuite, ou mieux, utilise des shared_ptr.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Si tu es dans une démarche d'apprentissage, alors je te conseillerais tout simplement de ne pas utiliser de pointeurs si tu n'en as pas besoin. Compte tenu des problèmes que la gestion dynamique de la mémoire peut créer, il est préférable d'apprendre à les manipuler que lorsque tu seras déjà à l'aise avec d'autres éléments du langage. J'aurais le même point de vue sur les tableaux.
    Typiquement, commence par te familiariser avec les conteneurs de la stl (std::vector) qui t'abstraient de ces problèmes.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/10/2006, 17h03
  2. Perte du pointeur à mon objet
    Par Maxou22 dans le forum C++
    Réponses: 1
    Dernier message: 11/03/2006, 05h42
  3. Tableau de pointeurs sur objets
    Par bassim dans le forum C++
    Réponses: 11
    Dernier message: 13/12/2005, 19h45
  4. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31
  5. [Debutant VC++.net] Obtenir un pointeur sur objet
    Par SteelBox dans le forum MFC
    Réponses: 6
    Dernier message: 17/06/2004, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo