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

Qt Discussion :

Acces au variables statiques en c++ /QT 3 designer


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut Acces au variables statiques en c++ /QT 3 designer
    Bonjour,
    pour mon projet ihm(Gestion d'un mgasin de meuble).
    j'ai relisé un logiciel avec un ficher comme base de donnée.
    au debut il faut chager le fichier dans la mémoire (j'ai crée des tabeaux)
    au moment de l'execution (ajouter, supprimer, afficher) j' utilise les données des tableaux.
    quand on quitte il faut , que je sauvegarde les données des tableaux dans le fichier.

    mais j'ai un probleme au démarrage sur le chargement du fichier dans tes tableau de variables static (partager les données dans tt les classes).
    ja'i fait ca:


    Data.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
     
     
    #ifndef MEUBLE_H
    #define MEUBLE_H
     
    #include <qstring.h>
     
    class Data
    {
    public:
     
     
        static QString  intitule;
        static QString  type;
        static QString couleur ;
        static int ref;
        static int  qte;
     
     
     
    };
     
    #endif
    Form1.cpp

    avec include "Data.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
     
    void Form1::init()
    {
        int i=0,j;
        // Un tableau d'enregistrement
     
       Data *D =new Data[5];
     
     
     
         QFile f( "meubles.txt" );
     
        if( !f.open( IO_ReadOnly))
     
     {
       //Erreur d'ouverture du fichier
        std::cout << "Failed to open file." << std::endl;
     }
     
        QTextStream ts( &f );
     
      // Extraction des informations depuis le fichier
     
       while(!ts.eof( ) &&(i<5))
      {
           ts >> D[i].ref;
           ts >>  D[i].intitule;
           ts >> D[i].type;
           ts >> D[i].couleur;
           ts >> D[i].qte;
      i++;
      }
     
     
      }
    à la compilation j'ai ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    .obj/form1.o: In function `Form1::init()':
    form1.cpp:(.text+0x4d4): undefined reference to `Data::ref'
    form1.cpp:(.text+0x4e4): undefined reference to `Data::intitule'
    form1.cpp:(.text+0x4f4): undefined reference to `Data::type'
    form1.cpp:(.text+0x504): undefined reference to `Data::couleur'
    form1.cpp:(.text+0x514): undefined reference to `Data::qte'
    collect2: ld a retourné 1 code d'état d'exécution
    make: *** [magasin] Erreur 1

    merci d'avance

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    C'est un problème de C++ là; tu les as déclaré comme membre statique. C-a-d comme attribut de classe et non d'instance.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Salut,

    C'est un problème de C++ là; tu les as déclaré comme membre statique. C-a-d comme attribut de classe et non d'instance.

    oui j'ai choisi de les décladé static pour que je puisse les utiliser les consulter et les modifier à partir d'une autre classe.
    comment faire pour acceder à ces varibles. j'ai essayer de faire par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    fs >> Data::ref
    fs >> Data::intitule
    fs >> Date::type
    fs >> Data::couleur
    fs >> Data::qte
    ca na pas marché
    merci

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Salut !

    L'accès à des variables statiques d'une classe s'effectue comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    [...]
     // Extraction des informations depuis le fichier   
    while(!ts.eof () && i<5) {
       ts >> Data::ref;
       ts >> Data::intitule;
       ts >> Data::type;
       ts >> Data::couleur;
       ts >> Data::qte;
       i++;
    }
    [...]
    Mais bon, dans ce cas tu vas lire 5 fois les valeurs dans ton fichier et écraser à chaque lecture tes données précédentes...
    Il y a donc un petit problème de conception dans tes classes !

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Il faut que tu ajoute dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QString  Data::intitule;
    QString  Data::type;
    QString  Data::couleur ;
    int        Data::ref;
    int        Data::qte;
    Tu peut aussi en profité pour les initialiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QString  Data::intitule;
    QString  Data::type';
    QString  Data::couleur;
    int        Data::ref   = 0;
    int        Data::qte  = 0;
    Un manière plus propre serait d'utiliser un/des singletons

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Il faut que tu ajoute dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QString  Data::intitule;
    QString  Data::type;
    QString  Data::couleur ;
    int        Data::ref;
    int        Data::qte;
    Tu peut aussi en profité pour les initialiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    QString  Data::intitule;
    QString  Data::type';
    QString  Data::couleur;
    int        Data::ref   = 0;
    int        Data::qte  = 0;
    Un manière plus propre serait d'utiliser un/des singletons
    J'ai fait ca dans Form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    void Form1::init()
    {
     
        QString  Data::intitule;
        QString  Data::type;
        QString  Data::couleur ;
         int        Data::ref=0;
         int        Data::qte=0;
         int i=0;
         ...
    à la compile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    .ui/../form1.ui.h: In member function «void Form1::init()":
    .ui/../form1.ui.h:15: erreur: invalid use of qualified-name «Data::intitule"
    .ui/../form1.ui.h:16: erreur: invalid use of qualified-name «Data::type"
    .ui/../form1.ui.h:17: erreur: invalid use of qualified-name «Data::couleur"
    .ui/../form1.ui.h:18: erreur: invalid use of qualified-name «Data::ref"
    .ui/../form1.ui.h:19: erreur: invalid use of qualified-name «Data::qte"
    make: *** [.obj/form1.o] Erreur 1
    merci

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    Citation Envoyé par mansour67 Voir le message
    Je suis sur QT3 designer, je clique sur le fênetre et je programme les methodes.
    J'ai fait ca dans Form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    void Form1::init()
    {
     
        QString  Data::intitule;
        QString  Data::type;
        QString  Data::couleur ;
         int        Data::ref=0;
         int        Data::qte=0;
         int i=0;
         ...
    à la compile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    .ui/../form1.ui.h: In member function «void Form1::init()":
    .ui/../form1.ui.h:15: erreur: invalid use of qualified-name «Data::intitule"
    .ui/../form1.ui.h:16: erreur: invalid use of qualified-name «Data::type"
    .ui/../form1.ui.h:17: erreur: invalid use of qualified-name «Data::couleur"
    .ui/../form1.ui.h:18: erreur: invalid use of qualified-name «Data::ref"
    .ui/../form1.ui.h:19: erreur: invalid use of qualified-name «Data::qte"
    make: *** [.obj/form1.o] Erreur 1
    merci

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par mansour67 Voir le message
    J'ai fait ca dans Form1
    Je me suis mal exprimé...
    Tu met ça juste après les include.
    Comme des variable globale

    Tu devrait chercher ce qu'es un singleton

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    en fait ce que veux faire c'est decreer une classe Data avec des variables static.
    après , je vais creer un tableau de classe data.

    pour votre code c'est tjrs le même probleme.

  10. #10
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Citation Envoyé par mansour67 Voir le message
    en fait ce que veux faire c'est decreer une classe Data avec des variables static.
    après , je vais creer un tableau de classe data.
    C'est justement ce qui ne va pas !
    Une variable statique est identique pour toutes les instances de cette classe. Si tu fais un tableau d'objets d'une classe contenant des variables statiques, tous les éléments de ton tableau auront la même valeur pour les variables statiques (elles servent justement à ça !)

    Je ne connais pas ton problème particulier, mais il vaut sans doute mieux que tes variables ne soient pas statiques...

  11. #11
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 91
    Par défaut
    Citation Envoyé par Fabllot Voir le message
    C'est justement ce qui ne va pas !
    Une variable statique est identique pour toutes les instances de cette classe. Si tu fais un tableau d'objets d'une classe contenant des variables statiques, tous les éléments de ton tableau auront la même valeur pour les variables statiques (elles servent justement à ça !)

    Je ne connais pas ton problème particulier, mais il vaut sans doute mieux que tes variables ne soient pas statiques...
    J'ai fait ca:
    Data.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
     
     
    #ifndef MEUBLE_H
    #define MEUBLE_H
     
    #include <qstring.h>
     
    class Data
    {
    public:
     
     
        QString  intitule [5],
                     type [5],
                     couleur[5] ;
        int ref[5],
             qte[5];
     };
     
     
     
    #endif
    dans la Classe Form1
    form1.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
     
    void Form1::init()
    {
     
        int i=0;
     
        //Un tableau d'enregistrements
        Data enr;
        //Copier les données du fichier
         QFile f( "meubles.txt" );
     
        if( !f.open( IO_ReadOnly))
     
     {
       //Erreur d'ouverture du fichier
        std::cout << "Failed to open file." << std::endl;
     }
     
        QTextStream ts( &f );
     
     
       while(!ts.eof( ) &&(i<5))
      {
       ts >> enr.ref[i];
        ts >>  enr.intitule[i];
        ts >> enr.type[i];
        ts >> enr.couleur[i];
        ts >> enr.qte[i];
        i++;
        i++;
      }
     
     }
    Je veux que ces donnée soitent en mémoire (tableaux) pour les utiliser dans d'autres classes: exemple dans la saisi

    classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void dlgSaisi::saisir()
    {
     
      ...
     
    }
    comment acceder au valeur de l'objet Data D de la classe Form1.?
    merci

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/03/2011, 11h58
  2. Réponses: 5
    Dernier message: 23/11/2006, 13h55
  3. [FLASH MX2004] [AS2] Accès aux variables d'une classe
    Par stailer dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/07/2005, 12h58
  4. [Language]Accès aux variables
    Par Adaemon dans le forum Langage
    Réponses: 12
    Dernier message: 27/04/2005, 14h17
  5. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55

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