begin process at 2012 05 29 08:29:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

GUI

 > 

Erreur "no matching function for call to machin::machin"


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Erreur "no matching function for call to machin::machin"

dimanche 27 mars 2011 à 18:13:40 | Erreur "no matching function for call to machin::machin"

FineLizzyX

Bonjour,

En C++, chaque étape dans la réalisation de ce que je comprends petit à petit se solde par des journées entières de recherche afin de trouver pourquoi l'exemple type ne fonctionne pas !

Je déclare une classe toute con dans un .h (création d'un formulaire dans la fenêtre principale de l'appli) :

class CFormDVD
{ /* déclaration des membres privés */
private :
[...] (des variables)

public :
CFormDVD(HWND, HINSTANCE); // Constructeur => Dessine le formulaire
virtual ~CFormDVD(); // Destructeur => Détruit les contrôles

[...] (quelques autres fonctions)
};


J'écris le constructeur :

CFormDVD::CFormDVD(HWND hWndParent, HINSTANCE hInstance) {
[...] (des affectations de variables et des "CreateWIndow")
}

Je déclare une variable globale (ou non - le résultat est le même) destinée à devenir un objet de cette classe :

CFormDVD FormDVD;

Et enfin, je crée l'objet par la fonction "new" :

FormDVD = new CFormDVD(hWnd, hinst);

J'ai essayé :
- Pas de déclaration à part, mais déclaration/affectation,
- Déclaration de l'objet avec la classe (c'est un peu mieux mais inopérant quand même),
- Avec un pointeur,

Résultat immuable :
"no matching function for call to 'CFormDVD::CFormDVD() (A la ligne où se situe la déclaration de la variable)
note: candidates are: CFormDVD::CFormDVD(HWND__*, HINSTANCE__*) (A la ligne où est déclarée la fonction dans la classe dans le .h)
note: CFormDVD::CFormDVD(const CFormDVD&) (A la ligne où se situe le "{" introduisant le contenu de la classe dans le .h)
no match for 'operator=' in 'FormDVD = (operator new(72u), (<statement>, ((CFormDVD*)<anonymous>))) (A la ligne de création de l'objet)
candidates are: CFormDVD& CFormDVD::operator=(const CFormDVD&) (au même "{" que plus haut)

D'où vient ce "const CFormDVD&" ???????

Je ne vois pas comment faire plus simple et plus standard ! Mais comme toujours, c'est dans la complexité dans laquelle les exemples et méthodes simples ne fonctionnent de tout façon pas que le C++ se complaît ! [MODE MAUVAISE FOIS OFF]

Franchement, je bloque....

XBX



lundi 28 mars 2011 à 00:14:52 | Re : Erreur "no matching function for call to machin::machin"

patatalo

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
salut,

tu déclare
CFormDVD::CFormDVD(HWND hWndParent, HINSTANCE hInstance)

mais tu utilises:
CFormDVD::CFormDVD() dans CFormDVD FormDVD;

tu devrais instancier:
CFormDVD FormDVD(hwnd, hinst);

ou déclarer un constructeur publique:
CFormDVD::CFormDVD(){...}


@++
lundi 28 mars 2011 à 06:56:51 | Re : Erreur "no matching function for call to machin::machin"

FineLizzyX

Bonjour,

Je ne cherche pas à utiliser CFormDVD::CFormDVD() mais à déclarer une variable par avance afin de gérer sa portée. Et, comme tu le soulignes, le compilateur croit que je l'utilise...

Du coup, j'ai instancié comme tu l'indiques et la compilation se termine sans erreur, effectivement (bien qu'à l'exécution du code, tous les contrôles créés ne s'affichent pas alors qu'en C standard, il n'y a pas ce problème...).

Qu'appelles-tu "constructeur public" ? le constructeur par défaut ? Si je comprends bien, j'écris le constructeur par défaut vide pour qu'il s'exécute au moment où je souhaite déclarer et à l'instanciation "complète", c'est le constructeur perso qui va s'exécuter ?

Le principe de la POO est séduisant, pas très compliqué à comprendre, un poil délicat à appréhender lors de la conception fonctionnelle d'une appli, carrément acrobatique au niveau du codage.

Encore merci pour ton aide !

XBX

lundi 28 mars 2011 à 10:12:15 | Re : Erreur "no matching function for call to machin::machin"

patatalo

Membre Club Administrateur CodeS-SourceS
re,

dans ton cas, ça serait plutôt:
CFormDVD *FormDVD;

FormDVD = new CFormDVD(hwnd, hisnt);

@++
mardi 29 mars 2011 à 01:30:06 | Re : Erreur "no matching function for call to machin::machin"

patatalo

Membre Club Administrateur CodeS-SourceS
Ce que tu dois voir c'est ça:
CFormDVD FormDVD; // crée un objet dans le segment data de ton prog. Il y a appel au constructeur et la taille de la donnée FormDVD sera sizeof <CFormDVD>

CFormDVD *FormDVD; // tu déclare ici que FormDVD sera l'adresse d'un objet CFormDVD. Il n'y a pas d'appel au constructeur et la taille de la donnée FormDVD sera sizeof <*>
Ton objet sera crée dans le tas avec l'operateur new et FormDVD recevra son adresse en mémoire.

++
mardi 29 mars 2011 à 08:37:48 | Re : Erreur "no matching function for call to machin::machin"

FineLizzyX

Merci beaucoup pour toutes ces précisions.

Je n'avais pas "imprimé" que la déclaration d'un pointeur vers l'instance (future) d'une classe n'exécutait pas le constructeur. Maintenant, je le sais. J'ai essayé : c'est ok !

@++


Cette discussion est classée dans : classe, déclaration, red, color, cformdvd


Répondre à ce message

Sujets en rapport avec ce message

Fixer la taille des string à la déclaration [ par ThierryPAUL ] Du fait de contraintes précises je dois pouvoir fixer, au sein d'une classe, la taille de mes string à leur déclaration (15 par exemple).Càd que je do [Aide]Foutu erreur de Link avec mySQL et VS2008 [ par Nixeus ] Bonjour à tous, Avant de commencer, je tiens à dire que j'ai cherché pas mal de temps sur forum et autres sites, ne trouvant pas de solution, je m'en modification partielle d'une chaine [ par fadiam ] bonjour Voici un un morceau de code qui réorganise une chaine de caractères(numéro de téléphone) en ajoutant des espaces s'il n'y en a pas. ex : 1234 Copier / coller un dossier en entier [ par roxod ] Bonjour, J'ai besoin de copier un dossier contenant des fichiers et des sous dossiers. Mon code : FILE *fds, *fdd; int value; fds = fopen(" Générer un arbre binaire à partir de deux parcours définis [ par Blonf ] Bonjour, Tout d'abord, étant nouveau, je tiens vivement à remercier les créateurs de ce forum d'entre-aide génial. Dans le cadre d'un TP de programm comment manipuler printf et scanf apartir des structures [ par wissouramos ] Bonjour,j'ai une grosse problème,et j'espère que je trouvera une solution grâce a vous: j'ai une structure par exemple: [color=red]typedef struct { sizeof d'un classe en C++ [ par MahaYassine ] Bonjour, J'ai un problème avec le C++ sous Solaris. Au fait j'essaye de faire un sizeOf d'une classe mais ça me retourne pas la taille exacte. Le ré C - opérateur tilde [ par mayssakh84 ] Bonjour , Avez-vous une idée sur le tilde ci dessous: char inbuf; . . output.put([color=red]~[/color]inbuf); Je sais pas à quoi correspond le tilde


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales