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 :

Problème lors de la compilation : Erreur "exit status 1 'Pages_Web' has not been declared".


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut Problème lors de la compilation : Erreur "exit status 1 'Pages_Web' has not been declared".
    Bonjour à tous.

    Cela fait un bon moment que je cherches la solution à ce problème mais rien a faire je n'y arrive pas...


    J'ai ce code dans un fichier "Motorisation.h" (qui est une classe que j'ai nommé "Motorisation") :

    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
    #ifndef MOTORISATION
    #define MOTORISATION
     
    #include "Pages_Web.h"
     
     
    class Motorisation
    {
      public :
     
        Motorisation(Pages_Web *s_pPageWeb);
     
     
      private :
     
        Pages_Web *pPageWeb;
    };
     
    #endif
    Mon fichier "Motorisation.cpp" contient ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include "Motorisation.h"
    #include "Pages_Web.h"
     
    Motorisation::Motorisation(Pages_Web *s_pPageWeb)
    { 
      pPageWeb = s_pPageWeb;
    }

    Mon fichier "Pages_Web.h" est comme ceci :

    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
    #ifndef PAGES_WEB_H
    #define PAGES_WEB_H
     
    #include "Motorisation.h"
     
    class Pages_Web
    {
      public :
     
        Pages_Web();
     
        void set_pMoteur(Motorisation *s_pMoteur);
     
      private :
     
        Motorisation *pMoteur;
     
    };
    #endif
    Et enfin mon fichier "Pages_Web.cpp" contient ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "Pages_Web.h"
     
    Pages_Web::Pages_Web()
    {
     
    }
     
    void set_pMoteur(Motorisation *s_pMoteur)
    {
      pMoteur = s_pMoteur;
    }
    Quand je veux compiler ce code, j'ai cette erreur qui ressort :
    exit status 1
    'Motorisation' has not been declared
    et me surligne la ligne 12
    void set_pMoteur(Motorisation *s_pMoteur);
    du fichier "Pages_Web.h".

    Je ne comprends pas à quoi c'est due ???

    Si quelqu'un peut m'aider ce sera avec grand plaisir.

    Par avance merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut
    Enlève le #include "Pages_Web.h" dans "Motorisation.h" et remplace par class Pages_Web;Cela dit, tu as vraiment besoin de motorisation dans page_web et réciproquement ? Ce genre de problème peut être un signe d'une mauvaise conception.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Bonjour.

    Merci de ta réponse.

    Oui j'ai effectivement besoin d'inclure Pages_Web dans motorisation et réciproquement car j'ai dans motorisation des éléments qui m'affichent des valeurs dans Pages_Web et Motorisation m'appelle des procédures de Pages_Web quand par exemple le moteur est en butée...

    Je ne connais pas cette syntaxe "class Pages_Web;" c'est pour quels cas ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Tu ne peux pas inclure à la fois motorisation.h dans pages_web.h et pages_web.h dans motorisation.h. "class Pages_Web;" permet de dire à motorisation.h que la classe existe mais sans définir son code complet, ce qui est suffisant pour déclarer un pointeur vers pages_web.

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    ok je vois.

    Du coups c'est pas un codage "propre" si je comprends bien je dois réfléchir à une autre solution ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Il vaut mieux éviter ce genre de dépendances circulaires. Je ne connais pas ton code mais a priori motorisation ne devrait pas dépendre de pages_web. Si une pages_web a besoin d'information sur motorisation ajoute les accesseurs nécessaires dans motorisation.

  7. #7
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Je ne connais pas ce principe d'accesseurs mais je vais me renseigner.

    En gros c'est sur une porte de poulailler.

    J'appelle ma fonction d'ouverture de la porte dans la classe Motorisation.
    Quand la porte est ouverte, j'appelle une page web dans ma classe Pages_Web qui m'ouvre donc une page internet avec en gros "porte ouverte".

    En revanche, j'ai aussi une page qui va chercher des informations dans Motorisation (porte ouverte, porte fermée, état du fin de course haut, état u fin de course bas, qui eux ce trouvent dans ma classe Motorisation).

    Je sais pas si c'est plus clair pour vous a présent mais l'idée est là.

    Après je reste sur qu'il reste d'autres options plus "simples" et "propre" pour ce genre de choses mais je ne les connais pas encore.

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ce qu'il te faut, c'est un système d'événements: Permettre à ta Page_Web de souscrire (de manière abstraite) pour être informé de ce qui arrive à la Motorisation, sans que la Motorisation ait besoin de savoir que c'est une Page_Web qui écoute.

    La façon "simple" (cad, ne nécessitant pas de bibliothèque externe) de faire ça est via une interface, cad une classe abstraite:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class IEvenementsMotorisation
    {
    public:
    	void changementEtat(Motorisation &motor) = 0;
    };
    Ainsi, ta classe Page_Web peut hériter de la classe IEvenementsMotorisation, et ta Motorisation garder un pointeur de IEvenementsMotorisation (voire, une liste de pointeurs) plutôt qu'un pointeur de Page_Web.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    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.

  10. #10
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    En réfléchissant un peut plus...

    Vu que ma motorisation appelle des pages web je me dois obligatoirement d'inclure Pages_Web dans ma classe Motorisation.

    Cela dit, Pages_Web à juste besoin de connaitre l'état de 2 fin de courses pour en déterminer l'état de la porte (ouverte fermée ou bloquée).

    Ce que je peux faire c'est donc une structure contenant mes états de fin de course??

    En gros j'aurais 2 classes qui appellent la même structure. C'est possible et "propre" ça non?

  11. #11
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Rien qu'aux noms ton truc sonne faux.
    En quel honneur la motorisation doit connaître une page web ? Parce que la page web affiche son état ? Tu prends le problème totalement à l'envers.
    Motorisation devrait s'auto-suffire. Si une page web, un autre programme ou que sais-je veut afficher son état, elle le lui demande (request, get, ...) et l'affiche.
    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.

  12. #12
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Non ma motorisation m’ouvre une page web quand elle a fini de fonctionner. Si j’ouvre, motorisation se met en route, ouvre ma porte jusqu’au fin de course ouverture. Quand il capte le fin de course, la porte est donc ouverte donc ça me l’affiche (d’ou L’appel de la page web). Je vois pas l’utilite De renvoyer un état (1 ouvert 0 bloque) pour ensuite afficher la page en fonction de cet état ? Pourquoi pas passer directement à afficher ce qu’on désire ?

  13. #13
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    - motorisation n'a rien à faire d'ouvrir une page web à la fin
    - il devrait y avoir autre chose autour qui quand il s'aperçoit que motorisation a fini ouvre la page web
    - pourquoi la page web devrait avoir besoin de motorisation si elle doit juste s'afficher ???
    - ouvrir une page web c'est l'affaire de quelques lignes pas d'une classe à part entière qui doit connaître tous les éléments internes qui ont servi à créer(?) la page

    Au final on se retrouve avec une architecture bancale pour faire un truc que personne comprend.. ma boule de crystal vient d'exploser.
    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.

  14. #14
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Haha.

    Justement je disais dans mon précédent post que ma page web a juste besoin de connaître l’état des fin de courses pour déterminer l’état de ma porte et me l’afficher. Donc créer une struct avec les fins de courses. Partant de la j’ai plus besoin d’inclure motorisation dans pages_web. Juste à lire l’etat De mes fdc dans la struct. C’est nul ça ?

    De plus c’est sur un système embarqué donc je dois taper le site web à la main en fonction de ce que je lui demande. D’ou L’idee De faire une classe pour appeler l’accesseur dont J’ai besoin (afficher état poulailler, page d’ouverture, page fermeture qui sont 2 pages d’attente que j’appelle pendant l’ouverture ou la fermeture de la porte, et ouverture finie fermeture finie) tout taper à la main avec des println etc c’est vite le zook. Donc j’ai fait une classe pour nettoyer un peut. J’aurais pas du ?

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Déjà, je ne comprends pas ce qui est fait à propos des pages web: Ton système, il inclut un serveur Web (et met donc à jour ses propres pages) ou bien il se connecte à un serveur Web pour y faire quelque chose?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Mon système crée les pages web à la volée si je puis dire.

    En gros mon code c’est ça :

    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
    client->print(F("<title> Porte Poulailler St Baudille : Etat. </title>"));
      client->println(F("</head>"));
      client->println(F("<body>"));
      client->print(F("<h1> <center> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Poulailler St Baudillois. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <font size=\"+1\"> <sub> Batterie : "));
      client->print(tension_batterie_pourcent);
      client->print(F("%. "));
      client->print(tension_reelle_batterie);
      client->print(F(" V. </sub> </center> </h1>"));
      client->print(F("<br><br><br> <center> <font size=\"+5\"> Etat du poulailler : </center> <br><br>"));
      client->print(F("<p> <center>"));
     
      if (valeur_fdc_haut && !valeur_fdc_bas) // Valeur 1 = inactif, 0 = actif.
      {
          client->print(F("<font size=\"+3\"> La porte est fermée. <br>"));
      }
      else if (!valeur_fdc_haut && valeur_fdc_bas) // Valeur 1 = inactif, 0 = actif.
      {
          client->print(F("<font size=\"+3\"> La porte est ouverte. <br>"));
      }
      else
      {
          client->print(F("<font size=\"+3\"> La porte est bloquée. <br>"));
      }
     
      client->print(F(" </center> </p> <br><br>"));
      client->print(F("</body>"));
      client->println(F("</html>"));
      client->print(DELIMITER); // very important to end the communication !!!
    }
    C’est juste une partie mais c’est l’idee. En gros j’ecris La page web et l’envoie à l’explorateur internet qui se connecte à l’adresse pour lui afficher une page en html.

  17. #17
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Dans ce cas, j'ai du mal à comprendre pourquoi c'est la Motorisation qui commande la page:
    Normalement une page Web créée à la volée, elle est créée sur demande du client, pas sur demande de la Motorisation...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Par défaut
    Ben en fait je voyais simplement un truc genre

    On reçoit la requête ouverture. On exécute le code d’ouverture. Quand l’ouverture est finie et si elle c’est bien déroulée alors on ouvre une page web (ouverture finie) si ça c’est mal passé la porte est bloquée donc on ouvre une page web (porte bloquée ouverture impossible). Toutes ces pages sont dans ma classe pages_web. Je vois pas l’interet Du coup de faire des retours dans la classe motorisation alors que je peux directement appeler mes pages web en fonction de ce qui c’est passé pendant mon ouverture fermeture qui ce trouvent dans ma classe motorisation. Après je dis pas que j’ai raison ou quoi hein. Juste que je ne vois pas encore en quoi c’est pas logique ?

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

Discussions similaires

  1. erreur : 'QT' has not been declared
    Par kevin254kl dans le forum Débuter
    Réponses: 2
    Dernier message: 12/12/2014, 19h38
  2. Problème sur std::ostream has not been declared
    Par ferroye dans le forum C++
    Réponses: 2
    Dernier message: 02/12/2011, 18h29
  3. Problème compilation 'has not been declared'
    Par Choupinou dans le forum C++
    Réponses: 5
    Dernier message: 28/11/2006, 20h09
  4. Réponses: 7
    Dernier message: 27/09/2005, 21h40

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