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 d'affichage avec ide visual c++


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut Problème d'affichage avec ide visual c++
    Bonjour je suis sous visual c++ 2005, et je dois dire que je suis un peu perdu,
    parce que le meme projet compiler avec mingw gnu fonctionne, et pas avec visual c++.

    Sous visual c++ après avoir compiler j'affiche la liste des erreurs que voici :
    Erreur 1 error C2679: '<<' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const std::string' (ou il n'existe pas de conversion acceptable) c:\users\...\document\visual studio 2005\projects\liste\liste\eleve.cpp 35
    et voici ce qu'il y a à ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void Eleve::afficher(ostream &o) const{
    	o << nom << " " << prenom << " " << age << " " << filiaire;
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void Enseignant::afficher(ostream & o) const{
    	o << nom << " " << prenom << " " << age << " " << enseigne_matiere;
    }
    je mets tout le code au cas ou :
    personne.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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #ifndef PERSONNE_H_
    #define PERSONNE_H_
     
    #include <string.h>
    #include <iostream>
     
    using namespace std;
     
    class Personne {
    protected:
    	string nom;
    	string prenom;
    	int age;
     
    public:
    	Personne(const string &nom, const string &prenom, const int &age);
    	Personne(const Personne &nom);
     
    	int getAge();
    	string getNom();
    	string getPrenom();
     
    	void setAge(const int &age);
    	void setNom(const string &nom);
    	void setPrenom(const string &prenom);
     
    	virtual ~Personne();
     
    	virtual void afficher(ostream &o = cout)const = 0;
    };
     
    ostream &operator<<(ostream &out, const Personne &p);
     
    #endif /* PERSONNE_H_ */
    personne.cpp
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include "Personne.h"
     
    Personne::Personne(const string &nom, const string &prenom, const int &age) {
    	this->age = age;
    	this->nom = nom;
    	this->prenom = prenom;
    }
     
    Personne::Personne(const Personne &nom){
    	this->age = nom.age;
    	this->nom = nom.nom;
    	this->prenom = nom.prenom;
    }
     
    Personne::~Personne() {
     
    }
     
    int Personne::getAge() {
    	return this->age;
    }
     
    string Personne::getNom(){
    	return this->nom;
    }
     
    string Personne::getPrenom(){
    	return this->prenom;
    }
     
    void Personne::setAge(const int &age){
    	this->age = age;
    }
     
    void Personne::setNom(const string &nom){
    	this->nom = nom;
    }
     
    void Personne::setPrenom(const string &prenom){
    	this->prenom = prenom;
    }
     
    ostream &operator<<(ostream &out, const Personne &p) {
    	p.afficher(out);
    	return out;
    }
    eleve.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
    22
    #ifndef ELEVE_H_
    #define ELEVE_H_
     
    #include "Personne.h"
     
    class Eleve : public Personne {
    private :
    	string filiaire;
     
    public:
    	Eleve(const string &nom, const string &prenom, const int &age, const string &filiaire);
    	Eleve(const Eleve &e);
     
    	string getFiliaire()const;
    	void setFiliaire(const string &filiere);
     
    	virtual ~Eleve();
    	virtual void afficher(ostream &os=cout)const;
    };
     
     
    #endif /* ELEVE_H_ */
    eleve.cpp
    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 "Eleve.h"
     
    Eleve::Eleve(const string & nom, const string & prenom, const int & age, const string & filiaire) : Personne(nom, prenom, age)
    {
    	this->filiaire = filiaire;
    }
     
    Eleve::~Eleve()
    {
    }
     
    Eleve::Eleve(const Eleve & e) : Personne(e)
    {
    	this->filiaire = e.filiaire;
    }
     
    void Eleve::setFiliaire(const string & filiere)
    {
    	this->filiaire = filiere;
    }
     
    string Eleve::getFiliaire() const
    {
    	return this->filiaire;
    }
     
    void Eleve::afficher(ostream &o) const{
    	o << nom << " " << prenom << " " << age << " " << filiaire;
    }
    Voila j'ai cherché sur le net mais je ne trouve pas la solution au problème de l'opérateur << qui m'empêche d'afficher l'objet via le cout (si j'enlève tout ce qui est en rapport avec cette surcharge ca fonctionne mais ce n'est pas mon but) voila avez vous des idées sur ce problème qui m'est épineux ?

    EDIT : j'ai trouvé d'où vient le problème et je trouve ca surprennant, le problème viens de la classe Personne

    ou je fais c'est , j'aurais pas pensé qu'il me ferait des misères pour ca puisque je peux utiliser le type string sans problème

  2. #2
    Membre émérite Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 047
    Points : 2 254
    Points
    2 254
    Par défaut
    #include <string.h>
    ceci est une version qui n'a pas été rajouter dans les standards C++.
    #include <string>
    est la version des standards C++.

    Utilise la version non standard et tu doit redéfinir l'opérateur de flux << toi même!
    Sinon utilise les versions standards (Sans les .h)

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par amateurc Voir le message
    personne.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* [... ) */
     
    using namespace std;
     
    /* [...] */
    Il est plus que recommandé de ne pas utiliser using namespace dans les fichiers d'en-têtes. Cf FAQ.
    D'autant que std::, ce n'est pas trop long à écrire.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 919
    Points : 220 492
    Points
    220 492
    Billets dans le blog
    127
    Par défaut
    De toute façon, même pour mingw le <string> est préférable

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut
    d'accord merci de vos aides, j'ai encore une question.
    J'essaye de surcharger l'opérateur >>, mais un problème se pose, je ne sais pas comment le régler. voici ce la classe personne avec les fonctions ajoutées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    class Personne {
    	virtual void afficher(ostream &o = cout)const = 0;
    	virtual void demande(istream &o = cin)const = 0;
    };
     
    ostream &operator<<(ostream &out, const Personne &p);
    istream &operator>>(istream &in, Personne &p);
    j'ai donc fait ceci dans personne.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    istream &operator>>(istream &in, Personne &p)
    {
    	p.demande(in);
    	return in;
    }
    dans eleve.h j'ai rajouter la déclaration en enlevant le = 0 et dans le cpp j'ai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void Eleve::demande(istream &in)const {
    	cout << "nom : "; in >> nom;
    	cout << "prenom : "; in >> prenom;
    	cout << "age : "; in >> age;
    	cout << "filiaire : "; in >> filiaire;
    }
    à la compilation j'ai ce message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Erreur	1	error C2679: '>>' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const std::string' (ou il n'existe pas de conversion acceptable)	37
    Erreur	2	error C2679: '>>' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const std::string' (ou il n'existe pas de conversion acceptable)	38
    Erreur	3	error C2679: '>>' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const int' (ou il n'existe pas de conversion acceptable)	39
    Erreur	4	error C2679: '>>' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const std::string' (ou il n'existe pas de conversion acceptable)	40

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    As-tu bien le include <string> ?
    Car ce genre de code fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <iostream>
    #include <string>
     
    int main()
    {
       std::string coucou;
       std::cin>>coucou;
       std::cout<<coucou;
       return 1;
    }

  7. #7
    screetch
    Invité(e)
    Par défaut
    pas possible de modifier Personne->nom car il est const car la fonction est const

    effectivement, comme indiqué, il est interdit d'ecrire dans une chaine const =)
    ta fonction n'est évidemment pas const de toute facon, tu devrais le retirer

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut
    merci de m'avoir aidé, le problème venait du const de la méthode(j'ai honte de pas avoir fait attention à ca )

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/05/2010, 12h05
  2. Réponses: 6
    Dernier message: 19/05/2005, 12h06
  3. problème d'affichage avec printf
    Par sorari dans le forum C++
    Réponses: 12
    Dernier message: 08/03/2005, 19h30
  4. Réponses: 6
    Dernier message: 19/10/2004, 14h46
  5. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 17h59

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