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

Langage C++ Discussion :

erreur d'affichage dans template


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de alexorcet
    Inscrit en
    Mai 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 86
    Par défaut erreur d'affichage dans template
    Bonsoir a tous
    j'ai modifié mon post car je viens d'avoir un nouveau soucis.

    j'ai le probleme suivant quand je veux afficher les objet PieceMuseeArt que j'encode et je parcous à l'aide de mon itérateur, à l'affichage il m'affiche tous les parametres par defaut de la PieceMuseeArt sans qu'il prenne en considération ce que je lui ai encodé.
    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
     
    int main()
    {
    	int i;
    	cout<<"combien delement voulez vous"<<endl;
    	cin>>i;
    	Personne per;
    	PieceMuseeArt p;
    	p.Encode();
    	TVecteur<PieceMuseeArt>vpm(i);
    	cout<<"fini";
    	vpm.ajout(&p);
    	vpm.affContenu();
     
     
    }
    la methode Encode
    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
    47
     
    PieceMusee& PieceMuseeArt::Encode()
    {
    	PieceMuseeArt pmar;
     
     
         	cout<<"--------------Encodage de la piece-----------"<<endl;
     
    	Identifiant i;
    	char l;int a;
    	cout<<"Inserer la lettre de l'id alphanumerique de la piece: ";
    	cin>>l;
    	i.setLettre(l);
    	this->id.setLettre(l);
    	cout<<"Quelle est son annee d acquisition?";
    	cin>>a;
    	i.setAnnee_dacq(a);
    	this->id.setAnnee_dacq(a);
     
    	pmar.setIdentifiant(i);
     
    	cout<<"l'id avec la surcharge de <<"<<i<<endl;
    	cout<<"l'id avec surcharge de = "<<pmar.id<<endl;
    	cout<<"l'id avec toString()est: "<<i.toString(l,a)<<endl<<endl;
    	cout<<"quelle est la categorie de la piece:  ";
    	cin>>category;
    	cout<<"decrivez la piece: ";
    	cin>>description;
     
    	cout<<"Donnez une estimation en euro de la piece:";
    	cin>>valeur;
    	cout<<"quelle est sa date d'entree au musee: ";
    	cin>>dateIn;
    	setDateIn(dateIn);
          	cout<<"la piece est-elle exposee au musee O/N: "<<endl;
    	cin>>exposed;
    	cout<<"encodage de l'auteur"<<endl;
     
    	pmar.auteur->Encoder();
     
    	this->auteur->nom = pmar.auteur->nom;
    	this->auteur->prenom = pmar.auteur->prenom;
    	this->auteur->dateDeNaissance = pmar.auteur->dateDeNaissance;
     
     
    	return *this;	
    }
    j'ajoute les element dans le vecteur template avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    template <class type>
    int TVecteur<type>::ajout( type *n)
    {
    	type *pNouv = new type;
            *pNouv = *n;// l'operateur = est surchargé correctement 
    	data[nbrElem] = *pNouv;	
    	nbrElem++;
     
    	return 1;	
    }
    et j'affiche avec la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template <class type>
    void TVecteur<type> :: affContenu(void)
    {
    	iterTVecteur<type> it(*this);
    	while(!it.end())
    	{
    		type t((type &)it);
    		cout<<t<<endl;//surchargé dans la classe type instanciée
    		it++;
     
    	}
    pourquoi à votre avis il m'affiche les parametre par defaut?

  2. #2
    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 : 50
    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
    Ton code n'est pas const-correct. *this retourne un objet constant, et le constructeur de ton itérateur indique qu'il va modifier son paramètre.

    PS : Inclure le message d'erreur aurait aidé à voir le problème...
    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.

  3. #3
    Membre confirmé Avatar de alexorcet
    Inscrit en
    Mai 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 86
    Par défaut
    desolé j'ai oublié de poster le message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    main.cxx:28:   instantiated from here
    TVecteur.h:39: erreur: ‘it’ has incomplete type
    TVecteur.h:39: erreur: storage size of ‘it’ isn't known
    Sorry

  4. #4
    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 : 50
    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
    Ok, c'est probablement un problème dans des #include et tes forward declarations de classes (en plus du problème de const déjà cité). Il va falloir nous en montrer plus sur ce sujet (les différents fichiers, ce qu'il y a au début...) pour qu'on soit spécifiques.
    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.

  5. #5
    Membre confirmé Avatar de alexorcet
    Inscrit en
    Mai 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 86
    Par défaut
    Merci JolyLoic pour ton aide
    voici plus ou moins l'integralité de mon code
    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
    47
    48
    49
    50
    51
     
    #ifndef TVECTEUR_H
    #define TVECTEUR_H
     
    //#include "PieceMuseeArt.h"
     
    #include <stream.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <values.h>
     
    template <class type>class iterTVecteur;
     
    template <class type> class TVecteur
    {
    	private:
    		type *data;
    		int nbrElem;
    	public:
    		TVecteur(int n=10 ){data = new type[n];
    	nbrElem = n;}
     
        	        void affContenu (void);
    		/*{
    			cout << "Nombre d'elements = " << nbrElem << endl<<endl;
     
    		}*/
         		int ajout (type *n);
         		int retrait (void);
     
    		~TVecteur(void){delete data;}
    };
     
     
    template <class type>
    void TVecteur<type> :: affContenu(void)
    {
    	iterTVecteur<type> it(*this);
    	while(!it.end())
    	{
    		//PieceMuseeArt *p = new PieceMuseeArt;
    		type t((type)it);
    		cout<<t<<endl;
    		it++;
    	}
     
     
     
    }
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    #ifndef ITERTVECTEUR_H
    #define ITERTVECTEUR_H
     
    #include "TVecteur.h"
    #include <stream.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <ctype.h>
    #include <values.h>
     
    template <class type>
    class iterTVecteur 
    {
            private :
    		TVecteur<type>& p;
    		type *pCur;
     
    	public :
    //le parametre est egalement un objet template
     
                    iterTVecteur (TVecteur<type>& s) : p(s)
                            { pCur = s.data; }
     
    		int end() 
                    {
                            return pCur==0;
                    }
     
    		void reset () { pCur = p.data; }
     
                    int operator++ ()
                    {
                            if (!end())
                            {
                                    pCur++;
                                    return 1;
                            }
                            else return 0;
                    }
                    int operator++ (int) { return operator++(); }
     
                    operator type ()const
    		{
     
    		  return *pCur;
     
    		  }
                    void operator= (type *v)
    		{ pCur = v;}
     
     
     
    };
     
     
    #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
     
    #include "TVecteur.h"
     
     
     
     
    int main()
    {
    	int i;
    	cout<<"combien delement voulez vous"<<endl;
    	cin>>i;
    	PieceMuseeArt p;
    	TVecteur<PieceMuseeArt>vpm(i);
    	cout<<"fini";
    	vpm.ajout(&p);
    	vpm.affContenu();
     
     
    }
    à l'aide...

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    J'ai pas le temps de regarder en detail, mais qu'est-ce que vient faire #include "PieceMuseeArt.h" (qui est visiblement quelque chose de specifique a l'application) dans un entete d'une classe "technique" comme un vecteur?

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

Discussions similaires

  1. Erreur d'affichage dans un displaysField
    Par abraxis dans le forum Ext JS / Sencha
    Réponses: 7
    Dernier message: 24/01/2012, 11h33
  2. Erreur d'affichage dans un StringGrid
    Par yannba dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/09/2011, 22h58
  3. Erreur d'affichage dans les boite de dialogue windows
    Par DEVELSI dans le forum Windows
    Réponses: 3
    Dernier message: 26/06/2007, 08h31
  4. [debutant]Erreur d'affichage dans le navigateur
    Par romca dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 02/06/2006, 10h21
  5. [MySQL] Erreur d'affichage d'un listing php dans un html
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 10/04/2006, 22h13

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