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 :

[Debutant+] Construction d'un objet / méthode d'accès


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Par défaut [Debutant+] Construction d'un objet / méthode d'accès
    Bonjour,

    J'ai une erreur très étrange que je n'avais jamais rencontré lors d'un autre TP C++; je définis un objet term du type Term (c'est un terme d'un polynome à plusieurs variables X1...Xn):

    Term term();

    Puis j'essaye d'appeler une méthode sur cet objet (en l'occurrence l'ajout d'un entier à un vecteur d'entiers):

    term.addElt(56);

    Et j'obtiens à la compilation le message très explicite suivant:

    request for member `addElt' in `term()', which is of non-aggregate type `Term ()()'

    Ceci dit, je ne vois pas comment résoudre l'erreur :-/

    Code du header "Term.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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    #ifndef _Term
    #define _Term
     
    #include <cstdlib>
    /*#include "gmpxx.h"  **** j'utiliserai cette classe lorsque le reste sera débuggé.. **** */
    #include <vector>
     
    /* typedef mpz_class Gen; // type du coefficient */
    typedef int Gen;
     
    typedef std::vector<int> Indet; // type des puissances des indeterminees
     
    class Term {
     
    public:
     
          // constructeurs: initialisation éventuelle des attributs
          Term::Term();
     
          // prend un tableau d'entiers en paramètre, que l'on transforme en vecteur
          Term::Term(Gen coeff, int* tab_indet, int size); // size est la taille du tableau
     
          // ajoute un élément en fin du vecteur
          void Term::addElt(int var);
     
          // transformation d'un terme en son opposé
          Term Term::operator-();
     
          // accès et modification des paramètres
          int Term::operator[](int p);
     
          // acces au coefficient
          Gen& Term::getCoeff(); 
     
          // destructeur
          Term::~Term();
     
    private:
     
          Gen coeff;
          Indet indet;
     
    };
     
    #endif
    Code de la méthode addElt dans Term.cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    // ajoute un élément en fin du vecteur
          Term::addElt(int var) {
                indet.push_back(var);
          }
    Et au cas où, mon main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    #include "Term.h"
    #include <iostream>
    using namespace std;
     
    int main(int argc, char **argv) {
    Term term();
    term.addElt(56);
    cout << term[0];
    }
    Merci d'avance,
    Benjamin

  2. #2
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    C'est une déclaration de fonction. Pour déclarer une instance de Term, il faut virer les parenthèses.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Par défaut
    Pourtant dans l'autre TP, on avait des constructions d'objets du type "MyRGBImage rgb1("test1-gauche.ppm");" où MyRGBImage est une classe muni d'un constructeur prenant un nom de fichier en paramètre :-/ Je patauge de plus en plus (meme si je suis d'accord, pour dire que term est un Term il faut enlever les parenthèses; mais comment appeler le constructeur ensuite sans se faire jeter par le compilo?)

  4. #4
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pourtant dans l'autre TP, on avait des constructions d'objets du type "MyRGBImage rgb1("test1-gauche.ppm");" où MyRGBImage est une classe muni d'un constructeur prenant un nom de fichier en paramètre
    Si ton constructeur accepte des paramètres alors il n'y a aucun problème, c'est bien comme cela qu'on l'appelle ; aucun risque d'ambiguité avec une déclaration de fonction.

    Si par contre il n'en a pas (constructeur par défaut), il ne faut pas utiliser de parenthèses vides.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 63
    Par défaut
    OK! je ne savais pas. Donc c'est résolu, merci. (et en plus ça compile ))

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/07/2014, 19h35
  2. Gestion d'objet encapsulé et accès aux méthodes.
    Par Ragnarok666 dans le forum Débuter
    Réponses: 7
    Dernier message: 13/03/2009, 14h37
  3. [c#] Méthode d'accès aux objets de ma form1
    Par SDuh dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/03/2006, 11h21
  4. [Debutant][Conception] visibilité des objets de type conteneur
    Par thebloodyman dans le forum Général Java
    Réponses: 10
    Dernier message: 04/01/2006, 12h44
  5. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28

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