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 :

Accès aux membres d'une classe impossible


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Accès aux membres d'une classe impossible
    Bonjour,

    Tout d'abord, voici le contenu de mon fichier "classes.h"
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #define MAX_FREQUENCY 2000
    #define MIN_FREQUENCY 10
     
    #define MAX_AMPLITUDE 5
    #define MIN_AMPLITUDE 0
     
    #define MAX_OFFSET 5
    #define MIN_OFFSET 0
     
    #define MAX_DCICLE    0.8
    #define MIN_DCICLE    0.2
     
    class Parameters{
          //---Attributs privés
          float value, minAllowed, maxAllowed;
    public:
           //---Constructeur
          Parameters(float maxAllowed, float minAllowed);
          //---Méthodes
          float get();
          void set(float value);
    };
     
    class Signal{
    public:
           //---Attributs publics
    		Parameters frequency(float max = MAX_FREQUENCY, float min = MIN_FREQUENCY), 
    			amplitude(float max = MAX_AMPLITUDE, float min = MIN_AMPLITUDE), 
    			offset(float max = MAX_OFFSET, float min = MIN_OFFSET),
    			dCicle(float max = MAX_DCICLE, float min = MIN_DCICLE);
    		//---Constructeur
           Signal();
           //---Méthodes
    };
    Puis "classes.cpp" :

    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
    21
    22
    23
    24
     
    #include "classes.h"
     
    //CLASSE PARAMETERS
    //---Constructeur
    Parameters::Parameters(float maxAllowed, float minAllowed){
        this->maxAllowed = maxAllowed;  
        this->minAllowed = minAllowed;
    }
    //---Méthodes
    float Parameters::get(){
        return this->value;
    }
    void Parameters::set(float value){
       if( (value < maxAllowed) && (value > minAllowed) ){
          this->value = value;
       }
    }
     
    //CLASSE SIGNAL
    //---Constructeur
    Signal::Signal(){
    }
    //---Méthodes
    Curieusement, après avoir instancié ma classe dans la fonction main par :
    Signal signal();
    Je n'arrive pas à faire :
    signal.amplitude().get();

    Avec pour erreur :
    main.cpp:14: error: request for member `amplitude' in `signal', which is of non-class type `Signal ()()'
    Pouvez-vous m'aider ?
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    C'est peut être une mauvaise idée d'appeler une variable signal. Cela risque de faire interférence avec la fonction signal()
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Ta classe Signal est mal formée: il manque des points-virgules et les fonctions membres suivantes ne renvoient rien: amplitudeoffset,dCicle

    Edit: remarque fausse, CF 2eme post r0d


    Ensuite Signal signal(); ne fait pas ce que tu penses.

    Ca déclare le prototype d'une fonction nomée signal renvoyant un objet du type Signal. Pour créer un objet signal du type Signal, c'est
    Edit: ram-0000 >> possible mais encore faut t'il que cette fonction arrive dans le namespace courant. Ca implique déjà d'inclure son prototype et ensuite de faire un using namespace std;
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Là j'avoue qu'il y a quelque chose qui me dépasse. Je n'avais jamais vu ça.
    Le code suivant compile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct Parameter
    {
    	Parameter( int n ) : num(n) {}
    	int num;
    };
     
    struct Dum
    {
    	Parameter p1( int n = 1 ), p2( int n = 2 );
    };
    Mais je ne comprends pas
    1. Ce qu'il fait exactement
    2. Comment utiliser une instance de Dum

    Je n'avais jamais vu cette façon de définir une classe
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Haaa j'ai compris
    Dans mon code précédent p1 et p2 sont deux fonctions membres qui renvoient toutes les deux une structure de type Parameter. Il manque juste l'implémentation de ces deux fonctions.

    Et donc, en réponse au P.O., Davidbrcz avait raison
    Et ram-0000 aussi
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    J'ai finalement résolu mon problème

    En fait, je voulais que le constructeur de la classe Signal appelle le constructeur de la classe Parameters, lors de la création de l'objet associé à la classe Signal.

    Donc le constructeur de la classe Signal est par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Signal::Signal : frequency(MAX_FREQUENCY, MIN_FREQUENCY){
    //Instructions
    }

Discussions similaires

  1. acces dynamique aux membres d'une classe
    Par Clorish dans le forum Général Java
    Réponses: 16
    Dernier message: 30/04/2008, 12h43
  2. Réponses: 5
    Dernier message: 01/02/2007, 13h14
  3. [Language]acces aux metode d une classe
    Par harris_macken dans le forum Langage
    Réponses: 5
    Dernier message: 06/04/2005, 09h52
  4. Réponses: 38
    Dernier message: 16/02/2005, 02h03
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

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