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

Autres éditeurs Discussion :

Problème de classes définies mais pas trouvées par g++


Sujet :

Autres éditeurs

  1. #1
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut Problème de classes définies mais pas trouvées par g++
    bonjour,
    j'ai un problème assez étrange. j'ai fait un programme dans lequel j'ai deux classes mainUi et boot. je voudrais appeler la classe boot dans mainUi. dans la partie privée de mainUi, je faiset lorsque je compile, j'ai
    src/ui/mainUi.h:35: error: ISO C++ forbids declaration of 'boot' with no type
    src/ui/mainUi.h:35: error: expected ';' before '*' token
    make: *** [build/.o/unix/mainUi.o] Erreur 1
    ma classe boot est correctement déclarée à priori : j'arrive à l'appeler depuis un autre fichier sans aucun souci

    voici le source : http://lycee.h.free.fr/fcp.tar.bz2

    tout est dans src/mainUi.* et src/boot.*

    je vois pas où est l'erreur
    vous pourriez m'aider ?

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Généralement, quand le compilo te sort une erreur du genre de
    error: ISO C++ forbids declaration of ' A TYPE' with no type
    c'est parce qu'il ne trouve pas la définition du type en question dans l'unité de compilation concernée...

    Le plus souvent, cela correspond *simplement* à une directive #include manquante

    Si, car je n'ai pas regardé l'archive que tu fournis, "boot" est une classe (ou une structure) que tu as créée toi meme, et que tu as l'include dans le fichier mainUi.cpp, le plus facile est peut etre, tout simplement, de faire une déclaration anticipée de la classe (ou de la structure) boot avant sa première utilisation...

    En gros, cela revient, au début du fichier (ou, en tout état de cause, avant la ligne 35 ici) à rajouter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class boot;
    /* ou */
    struct boot;
    (selon le cas)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    +1 koala
    Tes fichiers s'incluent mutuellement
    dans boot.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifndef BOOT_H
    #define BOOT_H
    
    #include "mainUi.h"
    et dans mainUI.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifndef MAINUI_H
    #define MAINUI_H
    
    #include "ui_mainUi.h"
    #include "hal.h"
    #include "messages.h"
    #include "changeNameDialog.h"
    #include "boot.h"
    En déclarant au préalable
    ça devrait passer.
    Linux > *

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920

  5. #5
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut
    j'ai ajouté unaprès les includes dans mainUi.h mais ça ne change rien

    j'ai supprimé tous les fichiers objets pour être sûr que de vieux morceaux ne trainent pas.

    je pensais pas qu'il pouvait avoir une telle question dans la faq

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    j'ai ajouté un
    après les includes dans mainUi.h
    Et bien sûr tu as retiré #include "boot.h" ?

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Au vu du message de befalimpertinent, et en s'aidant de la FAQ dont le lien est fourni par Laurent, il faut:
    • retirer le #include "boot.h" de mainUi.h
    • laisser le class boot; dans mainUI.h (si boot est une classe... remplacer class par struct si c'est une struct ) hors de toute structure et au plus tard avant la premiere classe qui l'utilise
    • ajouter un #include boot.h dans mainUi.cpp (ou, de manière générale, dans les fichiers d'implémentation qui utilisent mainUi.h)

    Si cela ne résoud toujours pas ton problème, faudra bien que je me décide à voir le contenu de l'archive
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut
    oui tout est bien comme ça mais il y tient à son message le bougre

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu as forcément oublié quelque chose. Ou alors il reste une inclusion cyclique ailleurs.

  10. #10
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut
    je viens de faire deux classes simples et ça passe. j'ai commencé à remettre les morceaux dont j'ai besoin et j'ai ainsi pu identifier la source du problème. j'utilise qt4 et je suis obligé de faire hériter ma classe mainUi de Ui::mainUi.

    si je ne fais pas hériter mainUi de Ui::mainUi, ça compile si je commente le code faisant appel à Ui::mainUi.

    je continue à chercher...

    edit : ce n'est pas un problème de nom de type : je changé boot en bootmik et toujours le message

  11. #11
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut
    bon en fait j'ai trouvé d'où vient le problème et c'est bien un problème de nom de type contrairement à ce que j'ai dit avant.
    dans mon code qt pour créer mon application graphique, j'ai un onglet qui se nomme boot donc il rentrait en conflit avec ma classe du même nom.

    bref le problème est résolu

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

Discussions similaires

  1. [XL-2003] Valeur cherchée existante mais pas trouvée par la macro
    Par tioch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/07/2011, 15h35
  2. Réponses: 18
    Dernier message: 15/06/2009, 17h14
  3. Classe principale pas trouvée par java webstart
    Par JCD21 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 15/04/2009, 17h33
  4. [Débutant] fichier .class pas trouvé par tomcat!!!
    Par oussam dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 03/03/2006, 15h31
  5. Fiche créée mais pas reconnue par l'application ??
    Par Leesox dans le forum Langage
    Réponses: 8
    Dernier message: 30/10/2005, 15h10

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