CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

c++ affectation bizarre

dnob700
dnob700
Niveau 10
19 mai 2005 à 23:03:17

je suis en train d´écrire une classe template de gestion de piles.

J´ai uen ligne de code qui me pose problème : this->next->next=NULL;

this est le bas de la pile. next est l´élément suivant qui existe et this->next->next n´existe pas et donc vaut zéro AVANT d´arriver à cette ligne.

Donc logiquement cette ligne ne devrai rien faire du tout. Et pourtant après cette ligne, this->next vaut aussi 0 ce qui bien sur fait tout planter ( mais ça vous vous en seriez douté).

si quelqu´un a une idée sur la cause de ce problème.

là il y a le code source complet de ma classe si nécessaire :
http://rafb.net/paste/results/azTcey17.nln.html

JeanYvesYves
JeanYvesYves
Niveau 10
20 mai 2005 à 14:47:46

Si je comprends bien, c´est ton test IsEmpty() qui n´est pas fiable ?
Bon tout d´abord une grosse critique :
Ton code est tres lourd, parce que tu mets " this" a chaque fois ! !
Enleve moi tous ces this !
tu as le droit, dans une méthode, de parler de la variable " next" et non de " this->next"
implicitement, il prendra le next de l´instance courante ( donc de " this" instance)

Ensuite, peut etre une piste, le true,false, et bool ne sont pas normalisés dans tous les langages, pour ma part, je prefere renvoyer un int à 0 ou 1...
Mais c´est un choix.
Ensuite, sémantiquement, ta méthode IsEmpty() renvoie vrai si il n´y a pas de suivant ?
C´est a dire que si ta liste est composé d´un seul élément, donc n´a pas de next, elle renvoie que c´est vide...
ça peut etre genant.

Ensuite, bon, le
T t;
puis le
return t;
derriere, en tant que programmeur C, je te mettrais un warning : uninitialised.
Si tu fais une STACK<int> tu ne peux pas prévoir le retour...
si tu veux renvoyer l´élément par défaut - meme si ça revient surement au meme - il est plus propre d´écrire :
T t();

Bon comme tu vois, c´est pas forcément la réponse que tu voulais, le meiux serait de poser un point d´arret sur le if, et de débugguer a ce niveau la.

dnob700
dnob700
Niveau 10
20 mai 2005 à 22:54:44

Pour le IsEmpty() je n´ai pas compris ce que tu lui reproche ( le object du bas de la pile n´est jamais initialisé et ne compte pas comme un élément de la pile).

Pour mon problème je crois que c´est exactement ce que LGV a évoqué il y a quelques jours, à savoir que lorsque je modifiais le fichier d´en tête, " générer" mon projet ne suffisait pas, il fallait le " régénérer" pour que VC voit que le fichier d´en tête a été modifié. Alors lorsque je déboguait, il m´afichait le bon fichier d´en tête, mais c´est pourça que l´erreur était incompréhensible car le code qu´il exécutait n´avait rien à voir avec ce qu´il m´affichait.

donc en quelques sorte fausse alerte.
merci quand même pour ta réponse.

Ah oui, et pour le return t si je déclare T t() il prend t pour le prototype d´une fonction. ce que par contre j´ai fait c´est de faire return T() dans le cas par défaut.

le coe " final" ( avec un ou deux autres bug corrigé) :
http://rafb.net/paste/results/0eXW0P30.html

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment