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++] Impossible de modifier une variable privée.

BlackChinchilla
BlackChinchilla
Niveau 10
14 août 2015 à 22:30:47

Bonjour, je repasse avec un vieux projet :hap: (Étant mon jeu en cmd de simu de crime)

Cette fois, j'ai corrigé quelques trucs qu'on m'avais indiqué dans mon autre topic d'il y'a longtemps, mais j'ai un nouveau problème :(

Voici le code source http://pastebin.com/ciBhj5ur (Je hait les balises JVC :( )

Donc, les variables de ma classe Player sont maintenant privée, j'ai un getter et un setter pour chacune d'elles, j'ai mes includes dans un fichier différent, jusque là ça va, ouais? :(

Bah non, dans ma fonction void Rest(Player PLA) je fait un appel à PLA.GET_PLA_AP(); et PLA.SET_PLA_AP(temp+sum);

Mon getter fonctionne, mais après avoir utilisé mon setter, en retournant dans le GAME_MAIN (qui par la suite fait appel à LoopingMenu ) je vois que PLA_AP est resté identique (donc à 15 par défaut).

J'ai cherché partout, et je vois absolument aucun problème que je connais :( (Ouais bon, j'utilise system mais je m'en fout, je veux apprendre le C++ avant de considérer la portabilité et la sécu, j'vais changer après ok? :fou: )

iPoseidon
iPoseidon
Niveau 10
14 août 2015 à 23:09:21

Quand tu passes en paramètre Player PLA dans void Rest(Player PLA), tu passes une copie de l'objet. Donc ta fonction modifie l'objet passé en paramètre (ta variable PLA_AP est bien modifiée) mais l'objet qui se trouvait dans void GAME_MAIN(Player PLA) (qui est lui même une copie d'objet d'ailleurs) n'en est pas modifié.

Ta fonction ne doit plus prendre en compte le paramètre Player PLA mais un pointeur de l'objet. Je ne sais plus comment ça s'écrit, ce doit-être void Rest(Player *PLA) ou void Rest(Player &PLA), quelque chose dans ce goût là (certains du forum te donneront la réponse j'espère huhu)

Ou bien ta fonction ne doit plus être void mais retourner l'objet en paramètres, donc PLA Rest(Player *PLA), et tu retournes le paramètre modifié à la fin de la fonction Rest. Et quand tu l'appelles, tu procèdes ainsi : PLA = Rest(PLA);

J'epsère que c'est compréhensible :noel:

Message édité le 14 août 2015 à 23:11:40 par iPoseidon
BlackChinchilla
BlackChinchilla
Niveau 10
14 août 2015 à 23:12:59

Ouais, je comprends tkt :oui:

J'avais pas pensé à ça, avant je programmais en Delphi, et en Delphi c'est direct du pointeur et pas une copie, d'où le fait que je trouvais pas le prob :hap:

Merci :oui:

Edit: Effectivement, ça marche quand je met &PLA comme variable dans Rest :oui:

J'attends tout de même l'avis d'autres personnes afin de savoir si il y'a une méthode plus commune/propre :(

Message édité le 14 août 2015 à 23:16:32 par BlackChinchilla
iPoseidon
iPoseidon
Niveau 10
14 août 2015 à 23:14:16

C'était donc un &, merci :noel:
Et de rien l'op

Message édité le 14 août 2015 à 23:14:34 par iPoseidon
BlackChinchilla
BlackChinchilla
Niveau 10
14 août 2015 à 23:25:52

Autre question, si j'ai une fonction qui n'utilise que des getters (par exemple, LoopingMenu) est-ce que je devrais quand même changer la variable pour un pointeur?

En pratique je vois aucun changement, mais ça me semble malpropre :(

Sujet fermé pour la raison suivante : Problème résolu.
Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment