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 :

Classe comme attribut


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut Classe comme attribut
    Bonjour le amis
    Je suis débutant en C++
    j'ai deux classes : Column qui a un attribut Table, et Table qui a un attribut liste des Column.

    la classe Column

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef COLUMN_H
    #define COLUMN_H
    #include "Table.h"
    class Column
    {
    public:
        Column();
    private:
        Table table;
    };
     
    #endif // COLUMN_H
    et la classe Table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef TABLE_H
    #define TABLE_H
    #include <QList>
    #include "Column.h"
     
    class Table
    {
    public:
        Table();
        QList<Column> columns;
    };
     
    #endif // TABLE_H
    j'obtiens l'erreur
    'Table' does not name a type
    Merci

  2. #2
    Membre chevronné Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Par défaut
    Bonjour,

    Ce lien peut t'être utile

    http://c2.com/cgi/wiki?ForwardDeclaration

  3. #3
    screetch
    Invité(e)
    Par défaut
    je ne comprend pas ce que tu essayes de fair; une table contient des colonnes, chaque colonne contient une table; on dirait une recursion infinie. Ca ne eut pas marcher ainsi.

  4. #4
    Membre actif
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut
    Merci pour vos réponses .
    comme j'ai dit je suis débutant en C++, par contre en JAVA je développe tous le temps comme ça et pas de problème.
    voila les mêmes classes JAVA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import java.util.List;
     
    public class Table {
    	private List<Column> columns;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class Column {
    	private Table table;
    }
    donc s'il y a un problème de récursivité infinie, le JAVA aussi ne doit pas l’autoriser.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    le problème c'est que JAVA te cache des choses en voulant te simplifier la vie.

    Comme tu l'as écris, une colonne contient une table et une table contient un tableau de colonnes.
    Y'a juste à lire pour se rendre compte de l'incohérence... une colonne qui contient une table !?!
    Non, une colonne appartient à une table, et à la limite on peut vouloir lui indiquer à quelle table elle appartient, ce qui semble être ton cas (ou alors tu as un gros problème de compréhension).
    Pour réaliser une telle chose, on va utiliser un pointeur. Et colonne contiendra un pointeur sur la table à laquelle il appartient.

    Il faut également indiquer que Table et Column existent l'un à l'autre. La première fois ça sera ok grâce à l'include, mais le 2° génèrera une erreur.


    Si c'est Column.cpp qui est compilé en premier, il fera l'include de Table.h
    Table.h génèrera une erreur parce que Column n'est pas encore définit, on a tout juste atteint la ligne relative à son include. L'include dans Table.h n'y change rien, les guard include sont là pour s'en assurer.
    Et inversement si Table.cpp est le premier à compiler.

    A ce moment-là, on passe au forward declaration, cf plus haut.


    JAVA cache l'utilisation de pointeur, mais pour cacher une telle incohérence c'est sûrement l'implémentation réelle qui se trouve derrière le code.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre actif
    Inscrit en
    Juillet 2006
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 28
    Par défaut
    Merci Bousk
    j'ai compris un peu ce que vous voulez me dire.
    donc si la solution est 'pointeurs', vous avez mes deux classes, svp faite moi les rectifications nécessaires.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    A priori une colonne ne va pas changer de table en cours de route et a une durée de vie égale (ou inférieur à celle-ci). Plutôt qu'un pointeur, je verrais plutôt une référence.
    Autre chose, Table n'étant probablement pas un objet IHM, QList => std::list (ou std::vector) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Table;
    class Column
    {
    public:
        Column(Table&);
    private:
        Table& table;
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <list>
    #include "Column.h"
     
    class Table
    {
    public:
        Table();
        std::list<Column> columns;
    };

Discussions similaires

  1. Classe comme attribut d'une classe parente
    Par tamerla dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 15/12/2014, 22h41
  2. Passer un objet comme attribut d'une classe
    Par Leduc08 dans le forum Ext JS / Sencha
    Réponses: 1
    Dernier message: 05/04/2011, 11h54
  3. QSqlDatabase comme attribut de classe
    Par mathiaskahn dans le forum Bases de données
    Réponses: 2
    Dernier message: 05/10/2010, 02h52
  4. Réponses: 3
    Dernier message: 16/03/2010, 23h47

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