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

Discussion :

Où déclarer des structures?

  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut Où déclarer des structures?
    Bonjour,

    Je suis actuellement en projet via le framework Qt.

    Voici le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        MainWindow fenetre;
        fenetre.show();
     
        return app.exec();
    }

    Voici la classe principale (MainWindow) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class MainWindow : public QWidget, private Ui::MainWindow  
    {
        Q_OBJECT
     
        public:
            MainWindow(QWidget *parent = 0);
     
        private slots:
            void calcul();
     
        private:
     
    };

    Et dans mon .cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MainWindow::MainWindow(QWidget *parent) : QWidget(parent)
    {
        setupUi(this);
        connect(BoutonValider, SIGNAL(clicked()), this, SLOT(calcul()));
    }
    La méthode calcul est implémentée et fonctionne, mon problème est de type structurel.
    En fait la fonction calcul fait appel à plusieurs fonctions qui elles même utilisent des structures.
    Avant de m'intéresser à l'IHM je travaillais sous code blocks et j'avais mis toutes ces fonctions et procèdures dans une même classe pour une meilleure propreté.
    Mais sous Qt, cela ne marchait pas car il ne reconnaissait pas ces fonctions (il ne les trouvait pas). Du coup, j'ai fait une méthode shadok on va dire j'ai mis toutes ces fonctions et structures dans MainWindows.cpp mais bon du coup le .cpp est surchargé et on y voit plus grand chose!

    Merci de bien m'aider.

    Voici l'affichage de la console :

    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
    debug/main.o: In function `Z13sortirVecteurRK7Matrice':
    c:/qt/2010.05/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/new:101: multiple d
    efinition of `sortirVecteur(Matrice const&)'
    debug/maFenetre.o:C:\Documents and Settings\RÚmi\Bureau\Stage\StageGraphique/Ope
    rations.h:39: first defined here
    debug/main.o: In function `Z20CalculDefautPositiondSs':
    C:\Documents and Settings\RÚmi\Bureau\Stage\StageGraphique/Operations.h:81: mult
    iple definition of `CalculDefautPosition(double, std::string)'
    debug/maFenetre.o:C:\Documents and Settings\RÚmi\Bureau\Stage\StageGraphique/Ope
    rations.h:81: first defined here
    debug/moc_maFenetre.o: In function `Z13sortirVecteurRK7Matrice':
    c:/Qt/2010.05/qt/include/QtCore/../../src/corelib/global/qglobal.h:1381: multipl
    e definition of `sortirVecteur(Matrice const&)'
    debug/maFenetre.o:C:\Documents and Settings\RÚmi\Bureau\Stage\StageGraphique/Ope
    rations.h:39: first defined here
    debug/moc_maFenetre.o: In function `Z20CalculDefautPositiondSs':
    C:\Documents and Settings\RÚmi\Bureau\Stage\StageGraphique/debug//../Operations.
    h:81: multiple definition of `CalculDefautPosition(double, std::string)'
    debug/maFenetre.o:C:\Documents and Settings\RÚmi\Bureau\Stage\StageGraphique/Ope
    rations.h:81: first defined here
    collect2: ld returned 1 exit status

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Avant de m'intéresser à l'IHM je travaillais sous code blocks et j'avais mis toutes ces fonctions et procèdures dans une même classe pour une meilleure propreté.
    Mais sous Qt, cela ne marchait pas car il ne reconnaissait pas ces fonctions (il ne les trouvait pas).
    Il n'y a pas de raison que le compilateur C++ ne trouve pas tes structures et fonctions (ou plus précisément, le problème vient probablement du code et non de Qt )

    Et à priori, le code de tes fonctions est définit dans Operation.h et tu as un problème de définitions multiples. Il faut plus d'informations pour comprendre le problème.

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut
    Oui biensur le problème vient de mon code (désolé si je me suis mal exprimé...).
    Plus d'informations? C'est à dire?

    Les fonctions et stuctures sont définies dans operations.h puis je fais un appel à cette classe dans MainWindow.h (#include "operations.h") mais je ne vois pas pourquoi j'ai un problème de définitions multiples.

    Je n'ai pas de classe operations.cpp est-ce un problème?
    Je ne pense pas que le problème vient de là mais on sait jamais...

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Non, ce n'est pas un problème de ne pas avoir de .cpp

    Tu as dit avoir définit tes fonctions de calcul dans MainWindows.cpp. Si tu y inclues aussi Operations.h, tu as des définitions multiples.

    Sinon, tu protèges bien ton fichier Operations.h avec des #ifndef ?

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut
    Nan mais j'ai inclue operations.h mais en enlevant les définitions de mes fonctions dans MainWindow.cpp donc normalement j'ai défini qu'une fois mes fonctions c'est bizarre

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Tu n'as pas protégé tes en-têtes avec des #ifndef ? Et bien fait le...
    Sinon, sans avoir le code complet, je vois pas très bien où est l'erreur d'inclusion

  7. #7
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut
    J'ai bien protégé mes en-têtes avec des #ifndef le problème ne vient pas de là.

    Pour vous éclaircir, je vous montre un peu plus de code :

    ma fonction calcul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void MainWindow::calcul()
    {
    ...
    calculerVecteurSortieMachineParfaite(tableauXParfait, tableauYParfait, tableauZParfait,
                                             theta1, theta2, nbPoints);

    La méthode calculerVecteurSortieMachineParfaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void calculerVecteurSortieMachineDefaut(double x[], double y[], double z[], double theta1, double theta2, int nbPoints)
    Cette méthode est définie dans operations.h et utilise des structures elles aussi définies dans operations.h.

  8. #8
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    A priori, dans tout ce que tu as donné, il n'y a pas de raison que cela ne fonctionne pas (ou alors ça m'a échappé). Le problème se situe ailleurs que dans la partie du code que tu as donné.

    Je met en pièce jointe un projet minimaliste avec une fonction dans un .h qui compile. Regarde ce qui est différent avec ton projet.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 145
    Par défaut
    J'ai trouvé le problème, je te remercie vraiment beaucoup pour l'attention que tu as apporté à mon projet.

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

Discussions similaires

  1. [Lex/Yacc] Aide traduction des structures de contrôle
    Par pelo68 dans le forum Générateurs de compilateur
    Réponses: 2
    Dernier message: 07/12/2010, 11h26
  2. Probleme avec des structures
    Par lenectar dans le forum C
    Réponses: 17
    Dernier message: 30/12/2005, 10h53
  3. [AS2] déclarer des variables dans une fonction
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 02/08/2005, 13h50
  4. [DB2] déclarer des procédures stockées
    Par rémi_tounul dans le forum DB2
    Réponses: 12
    Dernier message: 29/04/2005, 12h14
  5. [MFC][debutant] probleme pour déclarer une structure
    Par Robleplongeur dans le forum MFC
    Réponses: 10
    Dernier message: 21/02/2005, 14h29

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