IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

problème classe et fonction


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 49
    Points
    49
    Par défaut problème classe et fonction
    salut
    voila mon probleme
    j'ai une fonction qui recupere des parametre dans un fichier texte.
    Comme il y a plusieurs param j'ai décidé de créer une classe pour les regrouper.
    je créé donc une classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Cparametres{ 
                          void extract_param();
                          public:
                          double bruit;          
                          double param_a;
                          double param_lambda;
                          double iterations_filtre;
                      };
    et un constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Cparametres::Cparametres(){       
                            extract_param();  
                              }
    ensuite j'appele ma fonction qui va chercher les param dans le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void Cparametres::extract_param() 
    {......
     
            case 1: bruit=traitement_ligne(ligne);break;
            case 2: param_a=traitement_ligne(ligne);break;
            case 3: param_lambda=traitement_ligne(ligne);break;
            case 4: iterations_filtre=traitement_ligne(ligne);break;
    .....}    //pour mettre les données dans les membres de la classe
    j'ai mis tout ca dans un fichier .h (je sais normalement on met pas de code dans un .h mais la je voyais pas d'autre solution)
    puis depuis mon fichier main.c je souhaite acceder aux membres de ma classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	Cparametres Cpar;
                cout << "bruit:" <<Cpar.bruit<<endl;
    mais le compilo me dit: 19
    C:\projet esinsa\projet 13-10\extract_param.h definition of implicitly-declared `Cparametres::Cparametres()'
    ou bien 19
    C:\projet esinsa\projet 13-10\extract_param.h declaration of `Cparametres::Cparametres()' throws different exceptions
    je pense que j'ai fais des erreurs au niveau de ma classe... et aussi dans l'organisation des choses.
    est ce que quelqu'un pourrais m'eclairer...

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Tu n'a pas declarer le constructeur dans ta classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Cparametres{
                          void extract_param();
                          public:
                          double bruit;         
                          double param_a;
                          double param_lambda;
                          double iterations_filtre;
    public :
                          Cparametres();
    };

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    oula merci! y'avais effectivement un probleme a ce niveau la....
    mais quand je veux afficher un membre de cette classe, j'ai toujours un message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Cparametres Cpar;
    cout << "bruit:" <<Cpar.bruit<<endl;
    main.cpp expected constructor, destructor, or type conversion before '<<' token
    main.cpp expected `,' or `;' before '<<' token

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Essaye ceci :
    dans le constructeur tu ne met rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    class Cparametres{
    public:
                          void extract_param();
                          double bruit;         
                          double param_a;
                          double param_lambda;
                          double iterations_filtre;
                          Cparametres() {};
    };
    Met tout en public (tu fera des getter et des setter par la suite)
    Dans ton main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Cparametres Cpar;
    Cpar.extract_param();
    cout << "bruit:" <<Cpar.bruit<<endl;

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    merci de ta reponse rapide skyrunner.
    j'avais deja essayé ca sans succès... ca donne la meme erreur que précedemment.
    j'avais fait un test dans un fichier main unique ou j'avais mis la classe, les fonctions au debut du fichier, et l'affichage des valeurs dans le 'main' et ca marchait bien.
    depuis que je l'ai séparé en deux fichier 'main.c et 'param.h' que j'include dans main.c ca ne marche plus...

  6. #6
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Points : 174
    Points
    174
    Par défaut
    Cpar n'est pas initialise. Essaie ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cparametres Cpar();

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Citation Envoyé par la7su
    Cpar n'est pas initialise. Essaie ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cparametres Cpar();
    Ca c'est une déclaration de fonction. Je doute que cela initialise quoi que ce soit.
    En tout cas, je doute que cela aide qui que ce soit. Qui plus est, c'est une faute classique
    que je vois au moins une fois par semaine sur le forum, dont la mise en garde et
    l'explication se trouve dans la FAQ.

  8. #8
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par VoidSeer
    Citation Envoyé par la7su
    Cpar n'est pas initialise. Essaie ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cparametres Cpar();
    Ca c'est une déclaration de fonction. Je doute que cela initialise quoi que ce soit.
    En tout cas, je doute que cela aide qui que ce soit. Qui plus est, c'est une faute classique
    que je vois au moins une fois par semaine sur le forum, dont la mise en garde et
    l'explication se trouve dans la FAQ.
    Ca n'a rien avoir avec la declaration d'une fonction :
    c'est l'appel du constructeur de Cparametres sans passer par new.
    Alors la faute classique...
    Du coup ca aide vu que Cpar est initialise et on peut donc appele sa methode extract_param()

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ca n'a rien avoir avec la declaration d'une fonction :
    c'est l'appel du constructeur de Cparametres sans passer par new.
    Alors la faute classique...
    Du coup ca aide vu que Cpar est initialise et on peut donc appele sa methode extract_param()
    Non. Si tu avais essayé de compiler un tel code, ou si tu avais jeté un oeil à la FAQ, tu t'en serais rendu compte. C'est la moindre des choses, avant d'avancer de manière aussi affirmative une telle bêtise.

  10. #10
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Points : 174
    Points
    174
    Par défaut
    Autant pour moi
    Y'a des fois vaudrait mieux tourner 7fois sa langue dans sa bouche...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Citation Envoyé par la7su
    Autant pour moi
    Y'a des fois vaudrait mieux tourner 7fois sa langue dans sa bouche...
    Je pense sincèrement que si tu ne maîtrise mal les mécanismes de base de C++, tu devrais
    au moins tester ce que tu avances avant de poster quoi que ce soit.
    De plus, quand on fait référence à des documents (la FAQ en l'occurence), ça me paraît
    pas mal d'aller les consulter avant de contredire quelqu'un.

  12. #12
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Points : 174
    Points
    174
    Par défaut
    Bon je veux bien que j'ai fait une boulette et que j'ai ete un peu trop sur de moi, je reconnais tous mes torts. En attendantt vous pouvez continuer a rajouter des post me critiquant, mais reflechissez au moins un peu au pb, vu qu'apparemment c toujours pas resolu. A la base c'etait quand meme pour essayer de resoudre son pb que j'ai poste, mais si j'ai dit une enorme annerie... a bon entendeur...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Pour pouvoir répondre au problème initial, il faudrait pouvoir voir le code en entier.
    Le problème n'est pas sur le principe, puisque la déclaration de la structure et l'accès à
    un de ses membres est correct.
    Je penche plutôt pour une erreur bête, genre parenthèsage ou autre.
    Ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <iostream>
    using namespace std;
     
    class Cparametres
    {
    public:
      double bruit;
      double param_a;
      double param_lambda;
      double iterations_filtre;
     
    private:
      void extract_param();
    };
     
    int main()
    {
      Cparametres Cpar;
      cout << Cpar.bruit << endl;
    }
    Ca compile et fait ce qu'on en attend. L'erreur est donc ailleurs, et le code posté ne
    permet pas de la trouvé.


    @la7su
    Poster des erreurs, ça arrive. Mais persister avec suffisance dans sa bêtise sans même
    essayer de l'implanter, ou de se référer à la FAQ. C'est du foutage de gueule.

  14. #14
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    hep hep on se calme


    faut pas se facher pour si peu

  15. #15
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    faut pas se facher pour si peu
    +1.

    Sinon, a tout hasard, cf boost.program_option qui fait déjà ce genre de choses et plus encore. Couplé à des buffers filtrants, c'est que du bonheur.
    À supposer que le but de l'exercice ne soit pas de réinventer cette roue ci.

    Pour les erreurs, je dirais de faire sauter les spécifications d'exceptions. C'est lourd, pénible, couteux et ne fait pas ce que l'on aimerait que cela fasse.
    Et aussi de renommer le fichier .c pour lui donner une extension qui ne rime pas avec C, mais avec C++.

Discussions similaires

  1. Appel de fonction problème class/template
    Par Niko_de_bordo dans le forum Langage
    Réponses: 3
    Dernier message: 15/04/2010, 00h48
  2. Réponses: 4
    Dernier message: 10/12/2009, 00h45
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo