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

MFC Discussion :

CList problème afxtempl


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut CList problème afxtempl
    Bonjour à tous,

    J'ai un problème sur un projet MFC.
    J'ai deux classes standard C++ (non MFC) et dans l'une des deux je voudrais faire une liste de type de mon autre classe standard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #pragma once
    #include <afxtempl.h>
    #include "Gage.h"
     
    class CEmprunteur 
    {
      ...
      CList<CGage> tabGage;
      ...
    }
    Seulement ceci me renvoit cette erreur :
    Error 1 error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject' c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxtempl.h 781

    Il me renvoit la meme erreur si j'essaye de créer une liste de CString !!

    Je ne comprend vraiment pas.

    Je vous remercie des réponses que vous pourrez m'apporter.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Le compilo n'arrive pas à copier un objet dont la classe dérive de CObject (pour moi, ce doit être ce que tu appelles "une classe MFC" par opposition aux classes "standard C++") parce que l'opérateur d'affectation de CObject est private...

    Mon conseil: Soit tu transforme ta classe en classe C++ standard (tu ne la fais plus dériver de CObject, quoi) soit tu définis un constructeur de copie et un opérateur d'affectation pour ta classe dérivée.
    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.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Mais mes classes standard C++ (CEmprunteur, CGage) ne dérivent pas de CObject....

    Et le problème vient bien de cette ligne :
    Si je l'enleve le compilateur ne me fait pas d'erreur....

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Elles ont un constructeur de copie ?

    On peut voir leur définition de classe (les déclarations des variables et fonctions membre, quoi)
    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
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Pas de contructeur par recopie mais je ne crois pas que cela soit nécessaire ici puisque les variables membres ne sont pas dynamique au sens ou ce n'est pas moi qui gére la mémoire.

    Voici la définition de la classe Emprunteur :

    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
     
    class CEmprunteur 
    {
     
    public:
    	CEmprunteur();
    	virtual ~CEmprunteur();
     
     
    private:
    	int id;
    	CString Nom;
    	CString Prenom;
    	CString Adresse;
    	CString Telephone;
    	//CList<CGage> tabGage;
     
    public:
    	void putName(CString nom);
    	void putPrenom(CString prenom);
    	void putTelephone(CString tel);
    	void putAdresse(CString adr);
     
    	CString getNom();
    	CString getPrenom();
    	CString getAdresse();
    	CString getTelephone();
    };
    Et la définition de la classe Gage :

    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
     
    class CGage
    {
    public:
    	CGage(void);
    	void putName(CString nom);
    	void putValeur(int valeur);
    	CString getName();
    	int getValeur();
    public:
    	~CGage(void);
    private:
    	CString NomObjet;
    	int valeur;
    };

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Tu dis que tu as la même erreur quand tu crées une liste de CString...
    Tu as essayé en supprimant les CString de la classe CGage ?
    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.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Cela ne viendrait pas du fait qu'il faut redefinir un constructeur par recopie et redefinir l'operateur = pour ma classe CGage ?

    Informations ici

    Si c'est le cas, comment redefinir l'operateur =, je ne vois pas vraiment.

    {EDIT}
    Je viens de réaliser le constructeur par recopie et la surchage de l'opérateur mais cela ne change pas beaucoup. Dès le rajout de l'instruction dans ma classe Emprunteur je me retrouve avec 5 erreurs :

    Error 3 error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject' c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxtempl.h 781

    D'ailleurs les même erreurs sont produites avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CList<CString> tabGage;

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    tu te trompes sur la définition de ta CList , la déclaration est la suivante:
    exemple sur une CString: (voir MSDN).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CList<CString,CString&> myList;

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    Je ne sais plus ou j 'avais vu ca, mais il était spécifier que les deux déclarations était équivalente. Même si ce n'était pas le cas, cela ne change rien à mon problème, j'avais déjà testé cette déclaration.

    Je suis passé au Vector maintenant, et cela a marché du premier coup. Je n'ai pas le temps de m'attarder, pour le moment, en profondeur sur tous les problèmes.

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par samtheh
    Je ne sais plus ou j 'avais vu ca, mais il était spécifier que les deux déclarations était équivalente. Même si ce n'était pas le cas, cela ne change rien à mon problème, j'avais déjà testé cette déclaration.

    Je suis passé au Vector maintenant, et cela a marché du premier coup. Je n'ai pas le temps de m'attarder, pour le moment, en profondeur sur tous les problèmes.
    tu te trompes , je suis sûr que ça fonctionne et la syntaxe est celle indiquée, avec 2 arguments comme tous les autres conteneurs template MFC.
    axtempl.h est a mettre dans stdafx.h.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 473
    Par défaut
    C bizarr, je suis d'avoir essayé comme ceci et cela ne marchait pas.
    Enfin je verrais plus tard si ca marche ou pas.

    Merci de ton aide en tout cas.

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    y a une liste comme ca qui existe, mais c'est en .Net, elle s'appelle List et non CList

Discussions similaires

  1. [MFC][Visual 2005] Problème CList
    Par samtheh dans le forum MFC
    Réponses: 1
    Dernier message: 17/06/2006, 23h26
  2. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  3. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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