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

SL & STL C++ Discussion :

Utilisation de fstream


Sujet :

SL & STL C++

  1. #21
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Ca, c'est l'erreur classique quand on oublie que la classe vector est définie... dans l'espace de noms std...

    Fais simplement précéder chaque terme vector< un type> de std:: cela devrait suffire.

    Si tu es dans un fichier d'implémentation (donc un cpp), tu peux aussi te faciliter la vie en ajoutant la directive
    au début du fichier et en dehors de toute fonction (juste après le dernier #include)
    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

  2. #22
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Par défaut
    Ok,
    maintenant j'ai fait passé le paramètre de faisceauaffiche par réference, et puis j'ai effacé le ( using namespace std; ) que j'aivais mis dans le fichier faisceau.h
    Ca va peut être vous faire rigoler, mais on ne peut le mettre dans un fichier .h? que les fichiers .cpp ?

    Aussi, il reste des erreurs
    je reposte le faisceau.h après les divers changement faits:

    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
    30
    31
    32
    33
    34
    #ifndef FAISCEAU_H
    #define FAISCEAU_H
    #include <vector>
     
    class photon;
     
    class faisceau
    {
        public:
            void initialise(long long tps);
            void affichefaisceau(std::vector<photon> const &vector_a_afficher);
        private:
            std::vector<photon> tab_photon;
     
    };
     
    void faisceau::initialise(long long tps)
            { 
                photon photon_lu;
                photon_lu.tps_arrive = tps;
                photon_lu.ponderation = 0;
                tab_photon.push_back(photon_lu);
            }
    void faisceau::affichefaisceau(std::vector<photon> const &vector_a_afficher)
            {
                std::vector<photon>::iterator iter;
                for(iter=vector_a_afficher.begin(); iter!=vector_a_afficher.end();iter++)
                {
                    cout<<*iter<<"   \n";
     
                } 
            }
     
    #endif
    erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    faisceau.h: In member function ‘void faisceau::initialise(long long int)’:
    faisceau.h:19: error: aggregate ‘photon photon_lu’ has incomplete type and cannot be defined
    faisceau.h: In member function ‘void faisceau::affichefaisceau(const std::vector<photon, std::allocator<photon> >&)’:
    faisceau.h:27: error: no match foroperator=’ in ‘iter = ((const std::vector<photon, std::allocator<photon> >*)vector_a_afficher)->std::vector<_Tp, _Alloc>::begin [with _Tp = photon, _Alloc = std::allocator<photon>]()’
    /usr/include/c++/4.1.3/bits/stl_iterator.h:634: note: candidates are: __gnu_cxx::__normal_iterator<photon*, std::vector<photon, std::allocator<photon> > >& __gnu_cxx::__normal_iterator<photon*, std::vector<photon, std::allocator<photon> > >::operator=(const __gnu_cxx::__normal_iterator<photon*, std::vector<photon, std::allocator<photon> > >&)
    faisceau.h:29: error: ‘cout’ was not declared in this scope
    main.cpp: In function ‘int main()’:
    main.cpp:13: error: variable ‘std::ifstream ifs’ has initializer but incomplete type
    faisceau.h:13: error: ‘std::vector<photon, std::allocator<photon> > faisceau::tab_photon’ is private
    main.cpp:19: error: within this context
    main.cpp:19: error: ‘affichefaisceau’ was not declared in this scope

  3. #23
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Adnanius Voir le message
    Ca va peut être vous faire rigoler, mais on ne peut le mettre dans un fichier .h? que les fichiers .cpp ?
    http://cpp.developpez.com/faq/cpp/?p...SPACE_no_using


    Citation Envoyé par Adnanius Voir le message
    Aussi, il reste des erreurs
    Oui, et je n'ai pas le temps d'expliquer dans le détail le pourquoi du comment. Le problème vient du fait que dans ton faisceau.h, photon a uniquement été déclaré, pas défini. Tant qu'il s'agit de définir la classe faisceau, c'est suffisant, mais pas quand il s'agit d'en définir les fonctions membres.

    De toute façon, les fonction membre n'on rien à faire dans un .h.

    http://cpp.developpez.com/faq/cpp/?p...ASS_header_cpp

    En gros, enlève de ton .h la définition des fonctions, n'y laisse que la définition de la classe. Mets ces définitions de fonction dans faisceau.cpp, en oubliant pas d'y ajouter outre l'include "faisceau.h" un include "photon.h" qui permettra de définir Photon.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #24
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Par défaut
    Il y a cette erreur qui va me tuer!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    faisceau.cpp:17: error: no match foroperator<<’ in ‘std::cout << vector_a_afficher.std::vector<_Tp, _Alloc>::at [with _Tp = photon, _Alloc = std::allocator<photon>](((long unsigned int)i))
    faisceau.h:
    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
    #ifndef FAISCEAU_H
    #define FAISCEAU_H
    #include <vector>
    #include <iostream>
    #include "photon.h"
     
    class photon;
     
    class faisceau
    {
        public:
            void initialise(long long tps);
            void affichefaisceau(std::vector<photon> &vector_a_afficher);
        private:
            std::vector<photon> tab_photon;
     
    };
     
     
     
    #endif
    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
    #include <vector>
    #include <iostream>
    #include "faisceau.h"
    #include "photon.h"
     
     
    void faisceau::initialise(long long tps)
            { 
                photon photon_lu(tps,0);
                tab_photon.push_back(photon_lu);
            }
    void faisceau::affichefaisceau(std::vector<photon> vector_a_afficher)
            {
                std::vector<photon>::iterator iter;
                for(iter=vector_a_afficher.begin(); iter!=vector_a_afficher.end();iter++)
                {
                    cout << vector_a_afficher.at(i) << "   \n";
     
                } 
            }

  5. #25
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par Adnanius Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            void affichefaisceau(std::vector<photon> &vector_a_afficher);
    Attention, pour pouvoir l'appeler dans les même conditions que la version par copie, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void affichefaisceau(std::vector<photon> const &vector_a_afficher);
    D'un autre côté, vu qu'il s'agit d'une fonction membre de la classe faisceau, qui possède son vecteur de photon, ce paramètre est-il utile ? La fonction ne devrait elle pas plutôt travailler sur tab_photon ?

    Citation Envoyé par Adnanius Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void faisceau::affichefaisceau(std::vector<photon> vector_a_afficher)
    Il faut que la définition corresponde à la déclaration. Ajoute le '&' (et le const).
    Citation Envoyé par Adnanius Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            {
                std::vector<photon>::iterator iter;
                for(iter=vector_a_afficher.begin(); iter!=vector_a_afficher.end();iter++)
                {
                    cout << vector_a_afficher.at(i) << "   \n";
     
                } 
            }
    C'est quoi i dans ce contexte ? Si tu veux itérer par itérateurs plutôt que par index, fait le jusqu'au bout (ici, avec la modification de passage par référence constante, il te faudra des const_iterator).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(std::vector<photon>::const_iterator iter=vector_a_afficher.begin();
        iter!=vector_a_afficher.end();
        ++iter)
    {
        cout << *iter << "\n";
    }
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #26
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Par défaut
    D'un autre côté, vu qu'il s'agit d'une fonction membre de la classe faisceau, qui possède son vecteur de photon, ce paramètre est-il utile ? La fonction ne devrait elle pas plutôt travailler sur tab_photon ?
    oui t'a raison, je l'ai changé en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void faisceau::affichefaisceau()
            {
                std::vector<photon>::iterator iter;
                for(iter=((*this).tab_photon).begin(); iter!=((*this).tab_photon).end();iter++)
                {
                    cout << *iter << "\n";
     
                } 
            }
    de sorte que je puisse l'appeler depuis le main par monfaisceau.affichefaisceau() . Et ici on je n'ai plus besoin d'un const_iterator n'est ce pas ?

    Il faut que la définition corresponde à la déclaration. Ajoute le '&' (et le const).


    C'est quoi i dans ce contexte ? Si tu veux itérer par itérateurs plutôt que par index, fait le jusqu'au bout
    J'en suis désolé, c'est des résidus d'essais infructueux.

    mais il me donne toujours l'erreur parlant de l'opérateur <<

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    faisceau.cpp:20: error: no match foroperator<<’ in ‘std::cout << iter.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = photon*, _Container = std::vector<photon, std::allocator<photon> >]()

  7. #27
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Par défaut
    J'ai réusii à m'en sortir.
    Merci pour tous ceux qui m'ont aidé
    A bientot!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/02/2012, 17h44
  2. Utilisation de fstream
    Par luffy64 dans le forum Débuter
    Réponses: 3
    Dernier message: 02/02/2010, 11h28
  3. [Fichier] Problemes dans l'utilisation de fstream
    Par Kerwando dans le forum SL & STL
    Réponses: 14
    Dernier message: 09/08/2007, 01h14
  4. Utilisation de fstream dans une fonction
    Par Silverstone dans le forum SL & STL
    Réponses: 7
    Dernier message: 22/07/2006, 09h55
  5. Utilisation de <fstream>
    Par SebRs dans le forum SL & STL
    Réponses: 3
    Dernier message: 30/03/2006, 16h46

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