|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Alexandre Étudiant Inscription : décembre 2010 Messages : 44 ![]() |
Bonjour !
Je suis débutant en C++ donc soyez clément avec moi s'il vous plait error C2664: 'MyBee::displayBee' : cannot convert parameter 1 from 'MyBee *const ' to 'MyBee' Voici le code de mon fichier "myBee.cpp" : Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : juin 2009 Messages : 81 ![]() |
Le paramètre de ta fonction displayBee est passé par valeur dans ton prototype
et il semblerait que dans un fichier que tu nous montres pas et où se fait l'appel de ta fonction displayBee, tu lui passes un pointeur constant sur un objet de type MyBee : MyBee *const Montres le code où tu appelles ta fonction afin que l'on sache ce que tu souhaites faire. J'édite : désolé je n'avais même pas pris la peine de regarder ton constructeur où l'appel se fait. Oui donc tu lui passes this, this est du type MyBee *const Changes donc ta fonction en et l'appel dans le constructeur : |
|
|
10
|
|
|
#3 |
![]() ![]() |
Salut,
Il suffit de comprendre l'anglais pour comprendre l'erreur Le compilateur te dit qu'il ne peut pas convertir un MyBee * (autrement dit : un pointeur sur un objet de type MyBee) en MyBee const (autrement dit: un objet de type MyBee) Pour que tu te couches un peu moins ignorant ce soir que tu ne l'étais ce matin en te levant, sache que this est un pointeur sur l'objet courent (en gros, et sans entrer dans les détails, une variable numérique qui contient l'adresse mémoire à laquelle se trouve l'objet) et qu'il faut donc passer "ce qui est pointé par" this à toute fonction qui a besoin d'un objet (ou d'une référence sur un objet), qu'il soit constant ou non Enfin, ce n'est qu'un détail, mais displayBee est une fonction qui appartient à la classe MyBee, et, comme elle ne s'applique, selon toute logique, qu'à des objets de type MyBee existants, il n'y a pas vraiment lieu (bien que tu ne l'aies pas fait, je te rassure De plus, je te vois mal demander à un objet de type MyBee d'afficher un autre objet que lui-même Nous sommes donc dans le cas "de base" tout simple qui est que la fonction drawBee est, tout simplement, une fonction membre "tout ce qu'il y a de plus classique" et qui dispose donc d'office du pointeur this qui représente l'objet au départ duquel la fonction est appelée. Il n'y a donc strictement aucune raison pour transmettre un objet de type MyBee à cette fonction (en outre, quitte à transmettre un argument à la fonction, il semblerait préférable de transmettre une référence sur l'objet et non un objet lui-même, histoire d'éviter les copies inutiles (et peut etre impossibles ) Tant qu'à entrer dans les détails, cette fonction ne va très certainement pas modifier l'objet au départ duquel elle est appelée, et il serait donc "de bon ton" de signaler au compilateur que cette fonction s'engage à ne pas modifier l'objet au départ duquel elle est appelée en la déclarant constante : Cela aura pour effet de permettre d'appeler cette fonction y compris depuis des (références ou pointeurs sur des) objets constants, et donc d'améliorer la sécurité générale de ton application Et, bien sur, bien au delà de tout ce que j'ai écrit, on peut réellement se poser la question de savoir si la classe MyBee doit réellement être responsable de son affichage, car elle a déjà très certainement d'autres responsabilités et que cela contrevient au principe de responsabilité unique De plus, le fait de rendre la classe responsable de son propre affichage la rend particulièrement dépendante de la bibliothèque de rendu que tu utilises, alors que tu pourrais très bien décider de passer de OpenGl à diirectX à n'importe quel moment (voir, de permettre le support de l'un ou de l'autre en fonction de ce que l'on trouve chez l'utilisateur) ![]() Personnellement, je crois que je déléguerais cette responsabilité à une classe particulière qui ne ferait que cela et qui pourrait, le cas échéant, être spécialisé en fonction de la bibliothèque de rendu utilisée
__________________
en bas de page |
|
|
10
|
|
|
#4 |
|
Membre à l'essai
![]() Alexandre Étudiant Inscription : décembre 2010 Messages : 44 ![]() |
Merci beaucoup pour votre aide précieuse (j'espère que je me coucherais moins bête oui
).Si je souhaite demander quelques conseils supplémentaires sur d'autres fonctions dont j'ai besoin dans mon application, dois-je créer un nouveau topic ou puis-je continuer ici-même ? Bonne soirée ! |
|
|
00
|
|
|
#5 |
![]() ![]() |
Il vaut mieux créer une discussion par problème
De cette manière, toutes les discussions restent "propres" (comprends: non "polluées" par des considérations qui n'ont rien à voir avec la question d'origine De plus, il faut savoir que le forum sert énormément de "base de connaissance", et qu'il est donc beaucoup plus facile de s'y retrouver lorsque, à un titre précis correspond une et une seule question PS: il ne faut pas confondre ignorant (qui ne sait pas) et bête... cela n'a rien d'offensant de s'entendre dire que l'on ne connait pas quelque chose quand c'est le cas, mais ca peut etre extrêmement offensant de s'entendre traiter de bete type
__________________
en bas de page |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com