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 :

Appel de fonction boiteux


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 111
    Par défaut Appel de fonction boiteux
    Bonjour et merci pour votre intêret et vos réponses.

    Alors j'expose le problème:
    J'ai un fichier comprenant des initialisations de variables d'entrée/sortie nommé "InOut.hh"
    Pour certaines initialisations, je dois lire un fichier XML en utilisant un parseur (xerces en l'occurence, obligé par mes supèrieurs). J'ai donc créer un fichier "LectureXML.cpp" avec ma fonction de lecture du fichier XML (LECTURE_FICHIER_DONNEES) que j'ai inclut dans mon fichier "InOut.hh".

    Mais quand dans mon .hh j'apelle ma fonction LECTURE_FICHIER_DONNEES. Le compilo me renvoie un "LECTURE_FICHIER_DONNEES was not declared in this scope"

    J'aurais aimé savoir comment le déclarer...
    En résumé mon Fichier InOut.hh ressemble à ç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
     
    #include <math.h>
    #include "LectureXML.cpp"
     
    class InOut {
    public:
    //constructeur
    //Destructeur
    //Méthode d'initialisation
    void initialize (/*signature*/)
    {
     alpha= LECTURE_FICHIER_DONNEES();
    };
    }

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    3 choses pour commencer :

    - Pas de protection contre la multi-inclusion (pragma once ou ifndef/define).
    - Une declaration de classe se termine par un point-virgule. Exemple :

    - Une fonction se termine par une accolade et n'a pas besoin d'etre suivi par un point-virgule. Exemple :

    Ou dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class A
    {
     int test(void)
     {
     }
    };
    Par contre une declaration de fonction se termine bien par un point virgule. Exemple :

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 111
    Par défaut
    D'accord en fait il aurait fallu que je déclare ma fonction avant la classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int LECTURE_FICHIER_DONNEES (/*signature1*/);
    classe InOut
    {
      //Constructeur
      //Destructeur
      void Initialize(/*signature2*/)
      {
          alpha= LECTURE_FICHIER_DONNEES();
      }
    };
    Et ceux même si ma fonction est dévellopé dans un fichier inclut

  4. #4
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Il y a un truc que je vois qui me fait très peur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "LectureXML.cpp"
    On n’inclut jamais un .cpp, et surtout pas dans un .h .

    J’espère que c’est une typo .

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 111
    Par défaut
    Ben, en fait pour le coup c'est pas une Typo. Je travaille sur un logiciel assez énorme. On me demande de créer une méthode pour initialiser des données à partir d'un fichier XML, et comme je trouve que c'est plutôt sale de coder dans un .hh, je le fais dans un .cpp, même si l'inclusion d'un cpp dans un .hh est sale aussi...
    Mais tu me dit qu'on ne dois *JAMAIS* faire ça, pourtant ça ne me sors ni warning ni erreur, est-ce juste qu'on ne dois pas le faire parce que c'est pas propre ou parce que le compilo ne le prendrai pas en compte?

  6. #6
    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
    Bonjour,

    C'est tout simplement la règle.
    Les .cpp et .c sont compilés, les autres fichiers non.
    Tu utilises toutes les extensions que tu veux, mais .cpp et .c sont réservées aux fichiers compilés.
    Commencer à faire n'importe quoi n'est pas une bonne idée. Sous prétexte que ca semble marcher encore moins.
    Btw, mettre du code dans un header n'a rien de grave et ca arrive. C'est même obligatoire pour les templates.
    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.

Discussions similaires

  1. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  2. Réponses: 4
    Dernier message: 19/04/2004, 13h41
  3. [JSP] Appeler une fonction
    Par Patrick95 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 23/12/2003, 13h44
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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