3 réponses
aramir
Messages postés
939
Date d'inscription
mardi 26 février 2008
Statut
Membre
Dernière intervention
26 décembre 2016
222
4 mars 2015 à 08:33
4 mars 2015 à 08:33
Bonjour, comment déclares tu tour? Et juste par curiosité pourquoi doit il avoir (1,0) en paramètre ?
Bonjour, merci de votre réponse.
Je déclare tour de la manière suivante:
Le paramètre vie n'est pas nécessaire, mais ce n'est pas là le problème.
Merci d'avance.
Je déclare tour de la manière suivante:
class tour : public piece { public: tour(int a, int b); void affiche(); bool deplacement(int x_org, int y_org, int x_fin, int y_fin, piece **u); int get_vie(); int be_roi(); int get_couleur(); private: int vie; int couleur; };
Le paramètre vie n'est pas nécessaire, mais ce n'est pas là le problème.
Merci d'avance.
aramir
Messages postés
939
Date d'inscription
mardi 26 février 2008
Statut
Membre
Dernière intervention
26 décembre 2016
222
Modifié par aramir le 4/03/2015 à 10:00
Modifié par aramir le 4/03/2015 à 10:00
et quelle est l'erreur au fait? Quel message reçoit tu? Erreur de compilation, d'exécution ?
L'erreur est a suivante:
main.cpp:48:10: error: no viable overloaded '='
u[0][0] = &tourb;
main.cpp:48:10: error: no viable overloaded '='
u[0][0] = &tourb;
aramir
Messages postés
939
Date d'inscription
mardi 26 février 2008
Statut
Membre
Dernière intervention
26 décembre 2016
222
Modifié par aramir le 4/03/2015 à 11:10
Modifié par aramir le 4/03/2015 à 11:10
Ah, bah oui. Evidemment.
Je vais essayer de faire court étant donné que j'ai pas trop le temps là tout de suite.
Mais l'opérateur '=' n'est pas un opérateur magique.
Ce que je veux dire c'est qu'il a été programmé pour fonctionner avec certaines classes, certains type.
Il a fallu que quelqu'un lui dise: "ok si tu croise quelque chose du genre a=2+1, il faut que tu fasses 2+1 et que tu affectes cette valeure à a"
L'opérateur = vient donc avec une liste standard de comportement.
Mais là tu lui demandes de travailler avec un objet 'tour' que tu as développé toi même.
Forcément il ne connait pas l'objet 'tour' , il ne sait pas quoi faire avec. C'est pas présent dans sa liste de comportement standard
Il faut donc indiquer à l'opérateur = comment manipuler les "tour".
Et pour faire celà il faut "surcharger l'opérateur ="
Je te laisse chercher un petit peu sur google comment faire ca
cherches des termes comme "operator overload" / "surcharge opérateur"
Et quand tu auras compris, regardes aussi par ici, http://www.cplusplus.com/doc/tutorial/classes2/#copy_assignment
Reviens nous voir si tu as encore des problèmes.
Bonne journée
Je vais essayer de faire court étant donné que j'ai pas trop le temps là tout de suite.
Mais l'opérateur '=' n'est pas un opérateur magique.
Ce que je veux dire c'est qu'il a été programmé pour fonctionner avec certaines classes, certains type.
Il a fallu que quelqu'un lui dise: "ok si tu croise quelque chose du genre a=2+1, il faut que tu fasses 2+1 et que tu affectes cette valeure à a"
L'opérateur = vient donc avec une liste standard de comportement.
Mais là tu lui demandes de travailler avec un objet 'tour' que tu as développé toi même.
Forcément il ne connait pas l'objet 'tour' , il ne sait pas quoi faire avec. C'est pas présent dans sa liste de comportement standard
Il faut donc indiquer à l'opérateur = comment manipuler les "tour".
Et pour faire celà il faut "surcharger l'opérateur ="
Je te laisse chercher un petit peu sur google comment faire ca
cherches des termes comme "operator overload" / "surcharge opérateur"
Et quand tu auras compris, regardes aussi par ici, http://www.cplusplus.com/doc/tutorial/classes2/#copy_assignment
Reviens nous voir si tu as encore des problèmes.
Bonne journée
Bonjour,
J'ai eu un cours sur la surcharge d'opérateur et j'ai lu le site indiqué mais j'ai pas bien compris.
Je vous explique ma vision des choses. J'ai bien compris que le compilateur de ne sait pas comment réagir car l'objet vient d'une classe que j'ai créée. Mais justement je ne comprends pas pourquoi il ne comprend pas, car je ne fait pas l'égalité entre des objets de nouveaux types mais avec une adresse et un pointeur. Pour, moi l'adresse est indépendante du type, elle indique un endroit dans la mémoire. Par conséquent je comprends pas pourquoi cela n'est pas possible.
Donc il y a deux possibilité: soit il y a des concepts mal compris, soit j'ai un tableau à deux dimensions contenant de objets de type piece et non des pointeurs de type piece. Je privilégie bien sûr la première.
J'ai eu un cours sur la surcharge d'opérateur et j'ai lu le site indiqué mais j'ai pas bien compris.
Je vous explique ma vision des choses. J'ai bien compris que le compilateur de ne sait pas comment réagir car l'objet vient d'une classe que j'ai créée. Mais justement je ne comprends pas pourquoi il ne comprend pas, car je ne fait pas l'égalité entre des objets de nouveaux types mais avec une adresse et un pointeur. Pour, moi l'adresse est indépendante du type, elle indique un endroit dans la mémoire. Par conséquent je comprends pas pourquoi cela n'est pas possible.
Donc il y a deux possibilité: soit il y a des concepts mal compris, soit j'ai un tableau à deux dimensions contenant de objets de type piece et non des pointeurs de type piece. Je privilégie bien sûr la première.
Salut Hunken_V, je ne comprends rien aux pointeurs sur pointeurs/tableau et c'est pour ça que j'ais choisi le c++, on peut s'en passer.
tour tourb(1,0);
u[0][0] = &tourb;
passes comme une lettre à la poste, donc a mon avis ton echequier est mal initialisé, mais je ne saurais t'éclairer sur la façon d'allouer en utilisant les chaines de pointeurs.
#include <iostream> class piece { public: void affiche() { std::cout<<"vie:"<<vie<<"couleur:"<<couleur; } protected: int vie; int couleur; }; class tour : public piece { public: tour(int a, int b) { vie=a; couleur=b; } }; int main() { piece *u[8][8]; for(int i=0;i<8;i++) for(int j=0;j<8;j++) { u[i][j]= new piece; } tour tourb(1,0); u[0][0] = &tourb; u[0][0]->affiche(); return 0; }
tour tourb(1,0);
u[0][0] = &tourb;
passes comme une lettre à la poste, donc a mon avis ton echequier est mal initialisé, mais je ne saurais t'éclairer sur la façon d'allouer en utilisant les chaines de pointeurs.