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 :

[MFC] heritage multiple : CHtmlView & CWinThread destruc


Sujet :

MFC

  1. #1
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut [MFC] heritage multiple : CHtmlView & CWinThread destruc
    bonjour

    j'ai une class qui hérite de CWinThread et CHtlView

    et il me met ca lors de la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    C:\eDataTools\WebSynchronisor\CacheHtml.cpp(26) : error C2385: 'CCacheHtml::delete' is ambiguous
    C:\eDataTools\WebSynchronisor\CacheHtml.cpp(26) : warning C4385: could be the 'delete' in base 'CObject' of base 'CCmdTarget' of base 'CWnd' of base 'CView' of base 'CScrollView' of base 'CFormView' of base 'CHtmlView' of class 'CCacheHtml'
    C:\eDataTools\WebSynchronisor\CacheHtml.cpp(26) : warning C4385: or the 'delete' in base 'CObject' of base 'CCmdTarget' of base 'CWinThread' of class 'CCacheHtml'
    comment je dois faire pour résoudre cette erreur ?

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    : :

  3. #3
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    c'st pas possible ton truc...
    deja il vaut mieux eviter l'heritage multiple avec les MFC ,mais entre 2 classes MFC c'est pas possible..

  4. #4
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    ah oki mici
    je pouvais tjs chercher

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par farscape
    salut,
    c'st pas possible ton truc...
    deja il vaut mieux eviter l'heritage multiple avec les MFC ,mais entre 2 classes MFC c'est pas possible..
    :D
    hum, suis pas d'accord...
    je viens juste de le faire justement...
    je ne suis pas sur de moi pour ce qui est de futes de mémoire, mais la compilation passe...

    voila le 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
    /*
     * File : CBuffer.h
     * Date : 25/05/2005
     * Desc : Permet de gérer un double-buffer pour l'affichage
     */
     
    #ifndef __CBUFFER_H__
    #define __CBUFFER_H__
     
    #include "CorrectNew.h"
     
    class CBuffer : public CDC , public CRect , protected CBitmap
    {
    	DECLARE_DYNAMIC(CBuffer)
      private:
    	// Données membres
    	bool		m_is_init;
     
      public:
    	// Constructeurs
    	CBuffer();
    	void Init(CPaintDC &dc , CRect rect);
    	virtual ~CBuffer();
     
    	void operator delete(void* p);
    };
     
    #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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    /*
     * File : CBuffer.cxx
     * Date : 25/05/2005
     * Desc : Permet de gérer un double-buffer pour l'affichage
     */
     
    #include "stdafx.h"
     
     
    #include "CBuffer.h"
     
     
    IMPLEMENT_DYNAMIC(CBuffer,CDC)
     
    ///////////////////
    // Constructeurs //
    ///////////////////
     
    CBuffer::CBuffer()
    	:m_is_init(false)
    {} // CBuffer()
     
    CBuffer::~CBuffer()
    {} // ~CBuffer()
     
     
    void CBuffer::operator delete(void* p)
    {} // operator delete()
     
     
    ////////////////
    // Modifieurs //
    ////////////////
     
    void CBuffer::Init(CPaintDC &dc , CRect rect)
    {
    	this->CopyRect(rect);
     
    	this->CreateCompatibleDC(&dc);
    	this->CreateCompatibleBitmap(&dc,this->Width(),this->Height()); 
    	this->SelectObject(this);
     
    	m_is_init = true;
    } // CBuffer()
    Peut-etre est-ce que je fait une grossière erreur ?....

    (le delete est vide pcq je sais pas trop quoi y mettre, pour ça que la libération de la mémoire....)

    ---
    Sebbb

  6. #6
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    Je n’ai pas été assez précis :
    Pour les classes CDC et cbitmap etc héritent de CObject directe.
    Donc possible mais pas recommandé quand même.

    Dans son cas ça hérite de CmdTarget (gestion de la boucle des messages) comme toutes les classes fenêtres et la marcha pas .

  7. #7
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    pourquoi avoir redefini l'operateur delete ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par farscape
    pourquoi avoir redefini l'operateur delete ?
    :D
    bah pcq sans ça j'ai le même erreur que lui, delete ambigu...

    d'autre part CBitmap n'hérite pas de CObject, mais de CGdiObjets ;)

  9. #9
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    et bien relis bien ta doc ...
    CObjet c'est la premiere classe dont presque toutes les classes MFC heritent.
    pour ton delete tu peux essayer :
    CGdiObject::delete();

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par farscape
    et bien relis bien ta doc ...
    CObjet c'est la premiere classe dont presque toutes les classes MFC heritent.
    pour ton delete tu peux essayer :
    CGdiObject::delete();
    :D
    ben c'est ce que j'ai essayé, mais il faut pas... (le compilo)

    mais les oppérateur delete sont bien appelés en cascade non ?

    je pense que le seul pb c'était que il ne savais pas lequel prendre, mais maintenant qu'il y en a un, je pense qu'il doit faire celui de cette classe puis remonter les autres dans l'ordre de dérivation...

Discussions similaires

  1. C++ : Heritage multiple mais de même base.
    Par hpfx dans le forum C++
    Réponses: 28
    Dernier message: 12/07/2007, 14h28
  2. [C#] Heritage multiple -> comment faire autrement
    Par schnourf dans le forum Windows Forms
    Réponses: 14
    Dernier message: 03/10/2006, 16h14
  3. heritage multiple
    Par r0d dans le forum C++
    Réponses: 6
    Dernier message: 21/04/2006, 10h40
  4. [POO] Héritage multiple Parent
    Par djshaker dans le forum Langage
    Réponses: 15
    Dernier message: 15/03/2006, 18h35
  5. [Kylix] heritage multiple et interfaces :(
    Par le_barbu dans le forum EDI
    Réponses: 4
    Dernier message: 26/01/2004, 20h30

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