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 de copie de structure


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 55
    Par défaut problème de copie de structure
    Bonjour à tous,
    Je dispose de 2 classes : CListCmd et CReportCmd. CReportCmd hérite de CListCmd qui elle-même hérite de CListCtrl. DrawItem est une fonction virtuelle. Je définie DrawItem spécificiquement à CListCmd et à CReportCmd. Mon problème : je souhaiterais récupérer l'élément l_ptrDrawItemStruct de CListCmd dans ma classe CReportCmd pour y reprendre les éléments. Au niveau architecture, quelle serait la solution la + sexy? La copie de structure n'est pas correcte, j'ai un objet non initialisé, comment remedier à cela?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dans mon ListCmd.h
    LPDRAWITEMSTRUCT m_lpDrawItem;
    LPDRAWITEMSTRUCT getDrawItem(){return m_lpDrawItem;};
     
    dans mon ListCmd.cpp
    void CListCmd::DrawItem(LPDRAWITEMSTRUCT l_ptrDrawItemStruct) 
    {
    m_lpDrawItem = l_ptrDrawItemStruct;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dans mon reportCmd.cpp
    void CReportCmd::DrawItem(LPDRAWITEMSTRUCT l_ptrDrawItemStruct) 
    {
    CCmd		*l_listPtrCmd = ((CCmd *)(getDrawItem()->itemData));
    }

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par défaut
    Pourquoi vouloir récupérer le LPDRAWITEMSTRUCT de CListCmd alors qu'il est passé en paramètre à la fonction DrawItem ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void CReportCmd::DrawItem(LPDRAWITEMSTRUCT l_ptrDrawItemStruct) 
    {
      CCmd		*l_listPtrCmd = (CCmd *)(l_ptrDrawItemStruct->itemData);
    }

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    À partir du moment où tu fais un cast il y a évidemment un problème dans ta conception...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par loufoque Voir le message
    À partir du moment où tu fais un cast il y a évidemment un problème dans ta conception...
    Voilà bien une réponse toute faite un tantinet rapide. En l'occurence, les API Windows sont pleines de "cookies", des données void* ou DWORD qu'on peut utiliser pour y stocker tout ce qui y rentre. A ce moment-là, il faut bien faire un cast.

    La remarque de Sylvain est pertinente.

    Carl

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Faire un cast de void* vers T* c'est un cas particulier, c'est nécessaire pour atteindre une certaine généricité en C.

    Reste que l'API Windows est en C, et que même pour du C ça reste assez moche.
    Ce n'est absolument *pas* un modèle pour la programmation, surtout en C++.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Faire un cast de void* vers T* c'est un cas particulier, c'est nécessaire pour atteindre une certaine généricité en C.
    On est bien d'accord, alors!

    Carl

Discussions similaires

  1. Copie de structure par pointeur - Problème LSB MSB
    Par the_ionic dans le forum Réseau
    Réponses: 4
    Dernier message: 17/07/2006, 15h08
  2. [XSL] problème avec copy espace de nom
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 15h18
  3. Problème de copie de string dans string
    Par kazarn dans le forum SL & STL
    Réponses: 17
    Dernier message: 15/03/2005, 18h35
  4. Problème de rangement de structure dans un fichier ...
    Par Freeze dans le forum C++Builder
    Réponses: 8
    Dernier message: 16/12/2003, 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