|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||||
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 15 ![]() |
Bonjour/bonsoir,
Je nécessite votre aide a propos d'un problème sur lequel je m'arrache les cheveux depuis prés de 4 heures. J'ai créer une classe GameScreen et une classe GuiScreen. Ma classe GameScreen contient un objet de type GuiScreen. GameScreen.h Code :
Code :
Code :
Code :
main.c Code :
error: request for member 'Draw' in 'testScreen', which is of non-class type 'GameScreen(GuiTest (*)())' Je débute avec les constructeur de copie et les operateur d'affectation donc l'erreur vient peut-être de là. J'ai fait quelque recherche sur ce message d'erreur et j'ai vu que la plupart du temps c’était des gens qui se trompais en déclarant une fonction a la place d'utiliser le constructeur par défaut (en faisant "Classe objet()" au lieu de "Classe objet") mais je ne pense pas que ce soit mon cas. Merci d'avoir lu mon pavé, en espérant que mes nombreuses, éventuelles fautes d'orthographe n'auront pas réussi a vous décourager a me répondre. |
||||||||||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 185 ![]() |
D'abord, pour un constructeur, il faut toujours privilégier les initialiseurs.
Ensuite, une référence devrait être constante autant que possible. Enfin, la copie se fait sur un objet de meme type. En l'occurence, le constructeur de GameScreen devrait être: Code :
GameScreen::GameScreen(const GuiScreen& guiScreen) :m_guiScreen(guiScreen){}
Ceci est du aux relations dangereuses entre valeurs temporaires et référence non constantes. pour résoudre ton probleme sans changer le constructeur, procede par étape: Code :
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
||
|
00
|
|
|
#3 | ||||
|
Expert Confirmé Sénior
![]() |
Au passage, GuiScreen::operator= se comporte comme s'il s'agissait de GuiScreen::operator+=. Tu devrais utiliser l'idiome copy-and-swap à la place:
Code C++ :
Code C++ :
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
||||
|
|
00
|
|
|
#4 | ||||
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 15 ![]() |
D'abord merci pour une réponse si rapide.
Citation:
Peut-être comme ca: GameScreen testScreen(GuiTest); Code :
Ca fonctionne mais a la ligne 20: Code :
Engine::engineRender.drawGuiScreen(m_guiScreen); Citation:
|
||||
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() Pierre Ingénieur développement logiciels Inscription : juin 2007 Messages : 1 185 ![]() |
D'une manière générale, prends le temps pour lire toute la FAQ.
C'est une mine d'or, et savoir ce qu'on y trouve est extrêment utile.
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : décembre 2012 Messages : 15 ![]() |
Elle ma deja sauver la vie(surtout en ce qui concerne la POO). Mais je ne sait pas si elle contient quelconque infos sur l'idiome swap-and-copy, ou alors c'est moi qui cherche pas là ou il faut.
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() |
Si tu lis l'anglais, tu peux le trouver ici: More C++ Idioms/Copy-and-swap
Ce qui est important, c'est que le contenu du swap() ne puisse jamais lancer d'exception (Idiome Non-throwing swap) : Dedans on ne fait que permuter des pointeurs nus, des entiers, ou appeler les fonctions membres swap() des classes contenues (qui respectent les mêmes contraintes).
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant. "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?" Apparently everyone. -- Raymond Chen. Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com