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 :

Warning d'alignement templates+MFC


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut Warning d'alignement templates+MFC
    Bonjour,

    au boulot, j'ai un warning en Release sous Visual 2008 dans le code d'un template instancié avec une classe dérivée d'MFC.

    Voici le warning :

    CongesView.cpp
    d:\(...)\EventHandler.h(42) : warning C4121: 'event::MemberEventHandler<R,ARG>' : alignment of a member was sensitive to packing
    with
    [
    R=CCongesView,
    ARG=const CacheConges &
    ]
    d:\(...)\CongesView.h(201) : see reference to class template instantiation 'event::MemberEventHandler<R,ARG>' being compiled
    with
    [
    R=CCongesView,
    ARG=const CacheConges &
    ]
    Ce qu'en dit M$ : http://msdn.microsoft.com/en-us/libr...a3(VS.80).aspx

    Une partie du code du template (pas de pragma pack nulle part dans cette petite lib) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    template <typename R, typename ARG = EventArg>
    class MemberEventHandler : public EventHandlerBase<ARG>
    {
    public:
      typedef void (R::*MemHandlerFun)( ARG );
     
    private:
      MemHandlerFun handler_;
      R & receiver_;
    };
    Une partie du code utilisant le template (pas de pragma pack la non plus) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class CongesView: public CFormView
    {
    };
     
    class CCongesView : public CongesView, public SaveE0, public LoadE0, public Description0
    {
      event::MemberEventHandler<CCongesView, CacheConges const &> CacheCongesModifiedEventHandler;
    };
    D'où vient ce warning et comment le virer ?

  2. #2
    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
    Les messages d'erreur de GCC sont généralement plus compréhensibles.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Ceci est peut-être dû au fait que les pointeurs vers fonction membre peuvent avoir une taille variable.
    Essaie peut-être de mettre le pointeur en dernier...
    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.

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Effectivement en inversant l'ordre de définition des deux c'est bon.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    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.

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    J'ai parlé trop vite : le warning n'a pas disparu, il est simplement passé de la version Release à la Debug !!

    gloups

Discussions similaires

  1. [template] renommé (presque) et warning
    Par BainE dans le forum C++
    Réponses: 6
    Dernier message: 24/11/2006, 16h06
  2. [MFC] comment aligner le texte d'un CEdit
    Par giova_fr dans le forum MFC
    Réponses: 5
    Dernier message: 29/01/2006, 12h50
  3. Réponses: 5
    Dernier message: 14/12/2005, 13h02
  4. Réponses: 5
    Dernier message: 10/06/2004, 21h00
  5. [MFC][Toolbar] Aligner les toolbars
    Par 6psyk9 dans le forum MFC
    Réponses: 3
    Dernier message: 17/05/2004, 21h58

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