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 :

[Débutant]Passage d'un pointeur de fichier à un constructeur


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 72
    Points : 54
    Points
    54
    Par défaut [Débutant]Passage d'un pointeur de fichier à un constructeur
    Bonsoir,

    J'ai un probléme de passage d'argument sur un constructeur de classe.
    Je passe 3 arguments au constructeur de la classe : 2 int et 1 FILE.
    Le file me pose problème, je sais que cela vient de celui ci car si je modifie le constructeur en le mettant de côté, ca marche bien. De plus le compilateur, me dit qu'il n'y a pas de déclaration pour mon constructeur.

    En gros le programme doit ouvrir un fichier et instancier la classe xlsWriter qui utilisera le fichier précédement créé.

    Je crois que je devrais passer le fichier par référence avec le symbole &, mais bon, c'est comme marcher sur la lune, tout le monde sait le faire mais faut s'entrainer...

    Voici le code de la classe.
    Le header :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef xls2003writerH
    #define xls2003writerH
    //---------------------------------------------------------------------------
     
     
    class xlsWriter {
        public:
            xlsWriter ( FILE fichier, int lignes, int colonnes );
    };
     
    //---------------------------------------------------------------------------
    #endif
    le cpp de la classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "xlsWriter.h"
    #include <stdio.h>
     
    //---------------------------------------------------------------------------
    void xlsWriter::xlsWriter (FILE fichier, int lignes, int colonnes){
        char *entete;
        entete = "coucou";
        fwrite(entete, siezof(entete),1,fichier);
    }
    Et enfin le source qui fait l'appel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
     
    #include "xlsWriter.h"
    //---------------------------------------------------------------------------
     
    #pragma package(smart_init)
     
    void main (){
        FILE *fic;
        fic = fopen("toto.xml","w");
        xlsWriter*   toto = new xlsWriter(fic, 1,1);
    }
    Cela doit pas être bien compliquer, faut juste que je perde mes habitudes de non typage en perl

    Si quelqu'un a une idée, je le remercie d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Il faudrait peut-être inclure le fichier qui va bien dans ton fichier d'en-tête.

    (Une raison à utiliser FILE plutôt que std::fstream ?)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 72
    Points : 54
    Points
    54
    Par défaut
    pourtant xlsWriter.h est bien inclus dans le cpp de la classe et dans le cpp principale.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    un utilise rarement des FILE dans un programme...
    des FILE *, oui. Mais aucune fonction standard ne retourne ou ne prend en paramètre directement un FILE.

    De plus, oui, en C++, on utilise plutôt les flux.
    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.

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par htristra
    pourtant xlsWriter.h est bien inclus dans le cpp de la classe et dans le cpp principale.
    Je voulais te parler de la déclaration de FILE ... que tu utilises avant de la charger.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 72
    Points : 54
    Points
    54
    Par défaut
    Bonsoir,
    j'ai passé une partie de l'aprés midi à potasser la faq, les string, les flux (trés bonne faq et doc sur developpez.com ). Je vais repartir de zéro (pour ce qui avait ...).
    Ce ne sera plus la class qui ecrira dans le fichier mais elle retournera les données à écrire. Etant donné que la finalité est de produire des fichiers excel 2003 au format xml, c'est ce qu'il y a de plus logique. Soit le flux part dans un fichier, soit il part dans un navigateur qui l'ouvrira comme fichier excel.
    Je vais commencé léger, en incluant le .cpp, pour pas avoir à faire de header, on compliquera plus tard la chose.

    Donc maintenant, ca donne ça pour la classe :
    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
     
    #include <string>
    #include <sstream>
    //---------------------------------------------------------------------------
    using namespace std;
    class xlsWriter
    {
    private:
     
    public:
        string entete;
        string initialise(int lignes, int colonnes ) ;
    };
     
    //---------------------------------------------------------------------------
     
    string xlsWriter::initialise (int lignes, int colonnes) {
        // conversion du nb de colonnes (int->string)
        std::ostringstream css;
        css << colonnes;
        std::string c = css.str();
        // conversion du nb de lignes (int->string)
        std::ostringstream lss;
        lss << lignes;
        std::string l = lss.str();
     
        entete = "La feuille contient " + l + " et " + c + " colonnes";
        return entete;
    }
    et ceci pour le main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <fstream>
    #include "xlsWriter.cpp"
    //---------------------------------------------------------------------------
    int main (){
        std::ofstream fic ( "fichier.xml" );
        xlsWriter* toto = new xlsWriter();
        fic << toto->initialise(39,56) ;
    }
    Euh j'apporte pas grand chose à la discussion, mais j'allais pas partir sans vous remercier pour vos conseil d'orientation et la qualité des docs que vous fournissez.
    Merci bien à vous et continuez, nous sommes beaucoup à avoir besoins de vous ! Vi j'ai pas de problémes d'égo, je le dis, vous me rendez moins mauvais de jours en jours

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/02/2010, 16h24
  2. [Débutant] Passage de pointeur et classe template
    Par guigouz dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2008, 14h58
  3. Réponses: 2
    Dernier message: 28/04/2004, 11h25
  4. [ JSP ][ Débutant ] Passage d'objet par un forward
    Par captainpouet dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 08/04/2004, 10h33
  5. [débutante] passage de JBuilder à Eclipse
    Par phoebe dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/04/2004, 15h28

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