|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||||
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 4 ![]() |
Depuis mon autre problème d'hier, qui a heureusement été résolu, je me confronte aujourd'hui à un second problème, qui je pense est du aux pointeurs (je ne dois probablement pas encore en savoir assez sur eux pour les utiliser correctement, et pourtant je me suis déjà beaucoup renseigné sur eux à travers différents tuto...).
Mon problème est le suivant: j'ai une classe GameLaunch qui me permet de générer un monde à travers une classe WorldManager, qui contient tout simplement un tableau créé dynamiquement à deux dimensions, auquel on peut accéder via des mutateurs (get et set) qui renvoient ou change la valeur du tableau via son pointeur (int** worldTab). Cette classe WorldManager est donc créée dans une des méthodes de ma classe GameLaunch (void lauchGame() qui fait tourner la boucle principale du jeu), et j'ai créé un pointeur ptrWorldManager qui pointe sur cette classe pour pouvoir ensuite l'envoyer en argument à d'autres classes lors de leur construction. Le problème survient à ce moment là. Par exemple, je crée dynamiquement ma classe GenerateWorld en envoyant comme argument à son constructeur le pointeur ptrWorldManager, qui est alors stocké dans une variable à l'intérieur même de GenerateWorld. Puis le constructeur appel l'une de ses fonctions privées (void biomeCollines(...)). Cette fonction est donc censée utiliser worldManager->setWorldTab(i , j , set), ce qu'elle fait très bien, mais si par exemple set vaut 2, et que tout de suite après j'appel worldManager->getWorldTab(i , j), ce dernier me renvoi 0!!! J'ai le même problème dans toutes mes autres classes possédant un pointeur sur le fameux worldManager, dans tous les cas, un set ne changera rien et un get renverra toujours 0! Je suppose donc que mes pointeurs sur worldManager se mélangent, ou alors créent de nouvelles instances de WorldManager, ce que je ne comprend pas... J'implore donc votre aide, amis développeurs, et voici mon code: WorldManager.cpp: Code :
Code :
Code :
Code :
Code :
Code :
|
||||||||||||
|
|
00
|
|
|
#2 | ||
|
Membre éprouvé
![]() Étudiant Inscription : juin 2012 Messages : 263 ![]() |
C'est ton algo qui renvoi 0, pas un soucis de pointeur
Code :
Sinon tu devrais utiliser des smart ptr pour "generator", "imageManager" et "blockManager" (dans GameLaunch::launchgame() ). La si une exception est lancée tu te retrouve avec une fuite mémoire. edit: Heu... il ya que des tab[x][y] = 1 ou 2 dans le code, pas de memset ni de ZeroMemory et pourtant ça me donne 0, les tableaux de int sont initialisés à 0 ? *_* |
||
|
|
00
|
|
|
#3 | ||||||
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 665 ![]() |
Bonjour,
si tu veux faire un minecraft en c++, il faut que tu commences par arrêter d'utiliser des pointeurs partout Concrètement, au lieu de: Code :
Code :
De même, si tu a besoin de ton worldManager dans ton generator, passes-le par référence, et non par pointeur. Du coup, GenerateWorld ressemblera à quelque chose comme ceci: Code :
|
||||||
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 665 ![]() |
J'insiste lourdement, mais c'est important. Tu as écrit:
Si tu regardes un peu les en-têtes de la SFML, tu verras que tous les paramètres sont passés par référence. Il FAUT que tu fasses pareil, c'est à dire: |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 4 ![]() |
Effectivement Iradrille tu avais raison c'était bien un problème dans mon algo (tout simplement un - ou lieu d'un +
r0d: oui je crois que je vais arrêter avec tous ces pointeurs, et utiliser des références (je pensais que les pointeurs permettaient de faire plus de chose, mais effectivement, il y a beaucoup plus simple Donc merci à tous deux pour vos réponses rapides, et encore désolé pour ce mes stupides erreurs!!! |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 665 ![]() |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com