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 :

non aggregate type


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Par défaut non aggregate type
    salut à tous !

    au risque de passer pour le noeud que je suis en C+, j'ai une erreur persistante disant :
    main.cpp:12: error: request for member `getValeur' in `e1()', which is of non-aggregate type `element ()()'
    je suis sur que cela est une erreur courante de debutant mais voila google m'a appris deja la différence entre aggregate (type simple) et non aggregate (complex) mais voila encore faut til savoir ce que mon compilateur n'aime pas à la ligne 12... c'est un exo sur des listes chainées.

    voici les entetes
    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
     
    #ifndef ELEMENT_H
    #define ELEMENT_H
     
    #include <iostream>
    #define null 0
    using namespace std;
    typedef int X;
     
    class element{
        /*cette classe definit ce qu'est un element d'ensemble generique*/
     
        //propriété de la classe (private)
        X valeur;
        element* suivant; //pointeur sur element suivant
     
        public:
        //methode de la classe
            //constructeurs
     
            element(); 
            element(const X &val); 
            element(const X &val, element* ad); 
     
            //methodes membres    
            X getValeur()const;     
            element* getSuivant()const;    
            void setValeur(const X &val);   
            void setSuivant(element* suivant);   
    }; //fin de la classe element   
     
    //definition des methodes non membre de la classe element 
    void Detruire(element* &primelt);
    #endif
    et le corp du constructeur en question (ligne 12) cad le constructeur a vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            element::element(){
     
                valeur = 1;
                suivant = null; 
            }
    c'est d'autant plus etonnant qu'il accepte mes deux autres constrructeurs sans pb.

    le code d'appel (main est)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main(int argc, char *argv[])
    {
      element e1();
      cout << "definition de e1 sans parametre\r\n";
      cout << "la valeur de e1 est " << e1.getValeur() << " et il pointe vers " << e1.getSuivant() << "\r\n";
    tout simplement, ben non ca veut pas !!

    vous n'auriez as une idée

    merci et pardon pour les longueurs

    WDionysos !

  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

  3. #3
    Membre confirmé Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Par défaut
    ???

    d'accord j'ai compris ce point mais que dois je faire pour instancier un element je dois utiliser new comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    element e1 = new element()
    je croyais justement qu'en c a l'instar de java new n'etait pas necessaire pour ces objets et dans ce cas pourquoi il accepte mes deux autre constructeur (e2 avec 1 param et e3 avec 2 param)

    ca dois etre con mais je bute !

    WD

    EDIT::
    ok ca marche comme tu me dis sans () mais je voudrais comprendre pourquoi il accepte
    et pas
    ca fait brouillon non ?

    /EDIT::

  4. #4
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    element e2(8);
    ne peut pas corespondre à la déclaration d'une fonction puisque qu'un paramètres est passé.

    element e();
    par contre la ça peut effectivement corespondre à une déclaration de fonction.

  5. #5
    Membre confirmé Avatar de wdionysos
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 222
    Par défaut
    voila merci a vous j'ai compris,

    mais tout de meme loin de remettre en cause le talent de ceux qui ont ecris mon compilateur, je trouve quand meme cela dommage et pas très logique pour une question de neteté et de lisibilité du code, il auraient du prévoir un mecanisme par exemple si le type de retour et le meme nom de la classe alors c'est un constructeur de cette classe et non une fonction

    enfin, je vais pas réinventer la roue..



    Merci a tous

    WD !

    résolu !!!

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Tiens, tiens! Expatrié aussi?
    Mais Lothringen (=Lorraine) n'est pas, ou plus exactement n'est plus, en pays teuton!!!????

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par wdionysos
    mais tout de meme loin de remettre en cause le talent de ceux qui ont ecris mon compilateur, je trouve quand meme cela dommage et pas très logique pour une question de neteté et de lisibilité du code, il auraient du prévoir un mecanisme par exemple si le type de retour et le meme nom de la classe alors c'est un constructeur de cette classe et non une fonction
    Par défaut, s'il y a ambiguïté, c'est une déclarationd e fonction, c'est dans le standard. En effet, comment peut-il faire la différence entre un type pour déclarer une variable et un type de retour d'une fonction ?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/09/2009, 11h28
  2. conversion to non-scalar type requested
    Par jbarreau-mainson dans le forum C
    Réponses: 15
    Dernier message: 03/04/2009, 12h58
  3. Problème:Erreur 'which is of non-class type
    Par abzal dans le forum Débuter
    Réponses: 9
    Dernier message: 28/11/2008, 15h54
  4. Erreur 'which is of non-class type' ?
    Par jahmanzaar dans le forum Débuter
    Réponses: 7
    Dernier message: 15/10/2008, 22h53
  5. [OBJET] - non-aggregate type error
    Par jacquesh dans le forum C++
    Réponses: 3
    Dernier message: 28/04/2006, 13h49

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