Salut, je rencontre un (nouveau) soucis sur mon programme. J'aimerai savoir si il est possible d'envoyer une class dans une fonction. Par exemple:
//main.cpp
#include <main.h>
#include <Personnage.h>
#include ...
int main()
{
Personnage player();//Creation de l'objet player de classe Personnage
f_Arene(Personnage::player);//Envoie dans la fonction f_Arene un objet player de classe Personnage
]
//main.h
#include...
void f_Arene(Personnage player)
{
std::cout << player.getVie();//La fonction getVie retourne la vie du Personnage
}
//J'utilise un cout pour verifier que la fonction a bien recue l'objet
Autre possibilité:
//main.cpp
#include <main.h>
#include <Personnage.h>
#include ...
int main()
{
Personnage player();//Creation de l'objet player de classe Personnage
f_Arene();//Utilisation de f_Arene
]
Changes de cours. Il apprend un sacré paquet d'âneries à ne pas faire, en plus de montrer des exemples de code buggés et d'être obsolète (quelques recherches sur le forum t'en diront plus). Prends plutôt le tutoriel disponible sur Zeste de Savoir. Ou encore le cours de C++ de @gbdivers, même s'il est encore en écriture il ne contient pas ce genre de bavures (et si tu as des problèmes de compréhension sur une partie et que ce n'est pas à cause d'un manque d'étude du cours,tu peux poster ici). Si tu préfères un cours déjà complet, tourne toi vers le C++ Primer de Lippman dans sa dernière édition (en anglais), il sera un poil moins à jour mais c'est un bon cours.
Concernant ton code, ceci :
Personnage player();
ne crée PAS un objet "player". Cela déclare qu'il existe une fonction "player" qui ne reçoit aucun argument (), et renvoie un objet de type Personnage. Pour créer un objet :
Personnage player ;
// ou encore :
Personnnage player {} ;
Ok merci beaucoup pour tes conseils, je pense que j'irai sur le site de @gbdivers. Pour ce qu'il est des parenthèses dans le cours, i utilise des parenthèses, c'est ce qui ma trompé ^^. En effet j'avais déjà lu sur d'autre topic que le cours de c++ était bourre de faute, mais comme je l'ai voyez pas encore je ne changeais pas de cours, maintenant si:).
Bref sinon a part ca, il reste toujours mon problème initial, peut-on envoyer un objet (ici player) dans une fonction ou juste utiliser une methode de la classe dans une fonction?
Pour ce qu'il est des parenthèses dans le cours, i utilise des parenthèses, c'est ce qui ma trompé ^^.
En fait c'est un peu plus subtil que ça, la syntaxe de C++ est un peu pourrie. Si tu as des paramètres à passer. Cela crée bien un objet :
int x = 42 ;
Personnage player(x);
Ici, on crée bien un objet, parce que la présence du "x" nous indique bien que l'on n'a pas écris un prototype de fonction. En revanche, pour le cas où l'on ne transmet pas un paramètre C++ choisit de faire le "most vexing parse", c'est à dire de prendre systématiquement le cas qui va résoudre l'ambiguité de manière à te les briser.
MaelMathurin5 a écrit:
Bref sinon a part ca, il reste toujours mon problème initial, peut-on envoyer un objet (ici player) dans une fonction ou juste utiliser une methode de la classe dans une fonction?
Oui, et comme n'importe quelle variable :
class Machin{};
void foo(Machin m){
}
int main(){
Machin truc ;
foo(truc);
}
class Character {
private:
// on interdit copie et affectation par copie
Character(Character const&) = delete ;
Character& operator=(Character const&) = delete ;
};
Dès lors, la fonction ne peut plus prendre le personnage par valeur. On utilisera alors une référence (et potentiellement const) :
void foo(Character& c){
// c est modifiable
}
void bar(Character const& c){
// c est constant
}
int main(){
Character c ;
foo(c);
bar(c);
}
Ok, merci beaucoup. Je n'ai pas mon pc sur moi actuellement je testerai tout cela ce soir, meme si je n'ai pas compris tout le code quand tu interdit la copie et l'affectation par copie. D'ailleurs est il obligatoire? Le code doit marcher sans non?
Bref, merci beaucoup, je reposterai un message si je n'y arrive pas . A bientot (peut etre)
Ok, merci beaucoup. Je n'ai pas mon pc sur moi actuellement je testerai tout cela ce soir, meme si je n'ai pas compris tout le code quand tu interdit la copie et l'affectation par copie. D'ailleurs est il obligatoire? Le code doit marcher sans non?
Bien sûr qu'il marcherait sans. Mais le point est d'interdire cette opération parce qu'elle n'a pas de sens sur les classes entités. (Voir le lien que j'ai posté).
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C