No matching function for call to `calcul_position::methode_LMS (IHM *&)'
berenger_R
Messages postés21Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 3 avril 2006
-
23 mars 2006 à 17:09
berenger_R
Messages postés21Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 3 avril 2006
-
24 mars 2006 à 12:09
Bonjour,
Je suis novice en programation C++ (objet)
Et je ne comprend cette erreur, que veut dire "no matching function for call to" ?
Pour résumer mon exercice, j'ai 2 classes distinct A et B
Je dérive deux classes fille A1 et B1.
Il faudrait que je puisse récupérer dans un objet B1, une structure (struct) initialiser dans un objet A1.
Merci d'avance parce que ca fait plusieur jour que je suis dessus et je galère.
berenger_R
Messages postés21Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 3 avril 2006 23 mars 2006 à 18:15
Merci bcp,
est il possible de l'envoyer dans un répertoir car ca serrai un peu long de tout copier ici.
Car il y a en tout 5 fichier.hpp, 5 fichier.cpp, main().cpp et le makefile.
De plus j'ai fait un exemple simple (avec 2 classes et sans héritage) trouver des solutions plus facilement, mais le probleme et que dans mon exemple simple ca marche.
Donc voila si je peut t'envoyer le tout ce serrai plus simple.
if (notre_IHM.get_config().recepteur==1)
{
cout << " Vous avez choisi un Récepteur Novatel \n " << endl ;
notre_acquisition = new recepteur_novatel() ;
}
else
{
cout << " Vous avez choisi un Récepteur XXX \n " << endl ;
notre_acquisition = new recepteur_XXX() ;
};
notre_calcul_position = new moindre_carre();
notre_calcul_position->methode_LMS(¬re_IHM); ligne 82
notre_IHM.afficher_resultat(); ligne 84
return 0;
}
Voici les erreurs qui me donne (surtout ligne 82 et 84)
g++ -c -Wall -I./point_hpp/ -o ./objects/main.o ./point_cpp/main.cpp
./point_cpp/main.cpp: In function `int main (int, char **)':
./point_cpp/main.cpp:82: no matching function for call to
`calcul_position::methode_LMS (IHM *)'
./point_cpp/main.cpp:84: no matching function for call to
`IHM::afficher_resultat ()'
point_hpp/IHM.hpp:46: candidates are: void IHM::afficher_resultat
(POS_LLA)
make: *** [objects/main.o] Error 1
Vous n’avez pas trouvé la réponse que vous recherchez ?
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 24 mars 2006 à 09:38
Alors, pour le "using namespace std;", c'est assez simple. Le C++ est "découpé" en plusieurs namespaces (ou espace de noms) qui forment ce qu'on pourrait appeler un module. "cout", par exemple, fait partie de ce namespace. Dans un programme, si tu veux utiliser "cout" sans déclarer le namespace, tu est obligé d'utiliser la syntaxe suivante: "std::cout". En définitive, mettre le "using namespace std;" en début de ton programme allège ton code par la suite...
Pour la ligne 84, tu as oublié de donner un paramètre à la fonction afficher_resultat qui attend un POS_LLA.
Pour la ligne 82, voici ce que je te propose:
IHM * notre_IHM = new IHM();
...
notre_calcul_position->methode_LMS(notre_IHM);
...
delete notre_IHM;
return 0;
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
berenger_R
Messages postés21Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 3 avril 2006 24 mars 2006 à 11:08
Bon alors g tjrs le meme problemes
Seulement, pour la ligne 84 je devait faire la meme chose que sur la ligne 82.
Du coup g eu un probleme avec les includes car dans la classe calcul_position il ne connait pas la classe IHM et vise et versa.
G donc regroupé dans un meme fichier toute les déclaration des classes, mais il reste un probleme.
Merci d'avance pour ton temps.
g++ -c -Wall -I./point_hpp/ -o ./objects/main.o ./point_cpp/main.cpp
In file included from ./point_cpp/main.cpp:34:
point_hpp/class.hpp:62: `IHM' was not declared in this scope
point_hpp/class.hpp:62: `notre_IHM' was not declared in this scope
point_hpp/class.hpp:62: invalid data member initiailization
point_hpp/class.hpp:62: use `=' to initialize static data members
point_hpp/class.hpp:62: variable or field `methode_LMS' declared void
./point_cpp/main.cpp: In function `int main (int, char **)':
./point_cpp/main.cpp:82: no matching function for call to
`calcul_position::methode_LMS (IHM *&)'
make: *** [objects/main.o] Error 1
class kalman : public calcul_position
{
public:
kalman();
~kalman();
void methode_kalman();
};
/*---------------------------------------------------------------------------*/
/* Declaration de la classes IHM */
/* permet de configurer le programme */
/*---------------------------------------------------------------------------*/
class IHM
{
protected:
struct config cfg;
struct POS_LLA pos_estime;
/*---------------------------------------------------------------------------*/
/*2 programme principal du calcul du point GPS (+EGNOS) */
/*---------------------------------------------------------------------------*/
int main(int argc, char* argv[])
{
IHM* notre_IHM = new IHM();
//notre_IHM = new IHM;
acquisition *notre_acquisition;
correction notre_correction;
sat_position notre_sat_position;
calcul_position *notre_calcul_position;
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 24 mars 2006 à 11:18
Tu n'es pas obliger de mettre toutes tes délcarations de classe dans un même fichier .h, il faut juste que tu préviennes le compilateur que tu utilises une classe définie dans un autre fichier. Voici un exemple:
__________________
Fichier classA1.h
class A1
{
...
}
__________________
Fichier classA2.h
class A2
{
...
}
___________________
Fichier classB.h
#include "classA1.h" // inclut la définition de la classe classA1 que tu utilises
class classA2; // préviens que tu utilises un pointeur sur un objet de type classA2
class B
{
...
classA1 objetA1
classA2 * pObjetA2;
...
}
____________________
En espérant que cela soit assez clair...
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 24 mars 2006 à 11:22
Pour ton nouveau pb (IHM was not declarated in this scope), si tu gardes ta structure actuelle (toutes tes classes dans un fichier), il faut que tu définisses ta class IHM avant toute utilisation: tu la mets donc en début de fichiers et c'est régler
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
berenger_R
Messages postés21Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 3 avril 2006 24 mars 2006 à 11:28
Ok j'avais à peut prés compris ca.
Mais dans mon cas, ca ce mordais la queu et il me disait que je définissais plusieurs fois les classes. enfin ce probleme n'est pas trop grave.
mais g toujours le probleme ligne 82 alors que je ne l'ai plus ligne 84. Et la je comprend absolument pas.
Je te remercie d'etre aussi clair, car tu as bien du comprendre que j'était pas trés doué.
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 24 mars 2006 à 11:49
Bon, voyons ton pb "no matching call". C'est "vicieux" :)
En fait, dans ta classe calcul_position, tu n'as pas de méthode "afficher_resultat". Donc, ta ligne 82 est invalide... même si tu as créé un objet de type "moindre_carre". Ce qu'il faut faire: dire que tu veux utiliser la méthode de la classe moindre_carre, comme ceci
berenger_R
Messages postés21Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 3 avril 2006 24 mars 2006 à 12:09
Oui en fait il faut que l'objet notre_calul_position (qui doit etre un objet de la classe moindre_carre, car l'utilisateur choisira comme pour le recepteur_novatel ou recepteur_XXX d'utiliser moindre_carre ou kalman) puisse récupérer pos_estime qui est initialisé dans l'objet IHM afin de faire tout une serie de calcul. Puis l'objet IHM doit récupérer pos_calcule ainsi calculé afin de le sauvegarder dans un fichier.
Tu peux voir que j'en suis qu'au début, j'ai pas encore implémenté mes méthode. Je m'entraine pour l'instant.