Partage
  • Partager sur Facebook
  • Partager sur Twitter

[héritage] expected template-name befor '<' token

Sujet résolu
    26 juillet 2020 à 23:38:05

    Salut !

    Je suis en train de développer une bibliothèque "general purpose" dont le but final est de fournir le minimum nécessaire pour programmer en C++ moderne sans avoir à réinventer la roue, bref... une lib pas forcément utile ou meilleure que les autres (peut-être même que je déconseillerais son utilisation) mais une idée que j'ai en tête depuis pas mal de temps et que me fait kiffer.

    Pour expliquer rapidement le contexte. J'ai une classe (IAllocator) de base servant de concept/d'interface pour toute autre classe qui serait susceptible d'être un allocateur. Elle fournit deux fonction virtuelles pures:

    virtual pointer hina::IAllocator<T>::allocate( size_type )            = 0;
    virtual void    hina::IAllocator<T>::deallocate( pointer, size_type ) = 0;

    Et j'ai une seconde classe (NewAllocator) qui dérive de IAllocator et qui ne fait que surcharger les fonctions virtuelles fournies par la classe dont elle hérite. Cette classe sert donc d'allocateur (très banale) se basant sur les opérateurs new/delete pour gérer de la mémoire allouée dynamiquement.

    Je n'arrive pas à décrire le problème comme il faut et de façon claire donc je vous donne directement un lien vers les erreurs en question. Tout le code de la bibliothèque se trouve sur ce repos github, vous trouverez les classes qui posent problème dans master/include/hina/allocator.hpp et master/include/hina/new_allocator.hpp.

    EDIT: Il semblerait qu'en ayant modifié le nom d'un header guard une des erreurs ne soit plus présente durant la compilation... En effet, le header guard de new_allocator.hpp était le même que celui de allocator.hpp, de ce fait, lorsque j'essayais d'inclure allocator.hpp à new_allocator.hpp, le contenu du fichier n'était pas totalement inclus.

    Je laisse le post actif au cas ou quelqu'un prendrait le temps de jeter un coup d'oeil au code qui pose problème. J'ai mis le lien vers l'erreur à jour !

    EDIT bis: Bon... Problème résolu, il s'agissait très bêtement d'une des fonction virtuelle pure qui n'était pas override dans la classe NewAllocator, car size_type n'avait pas la même "valeur" dans les deux classes.

    Je vous serais tout de même très reconnaissant d'avoir pris le temps de regarder un peu le code du projet. Il n'en n'est qu'à ses débuts et il est très instable et bourré d'erreurs, mais ça fait toujours plaisir de recevoir des conseils pertinents pour en améliorer le contenu.

    -
    Edité par Daimyo_ 27 juillet 2020 à 0:01:25

    • Partager sur Facebook
    • Partager sur Twitter
      27 juillet 2020 à 12:56:50

      Salut,

      Comme je ne vais pas répéter tout ce que j'ai écrit il y a à peine quinze heures, je te conseille de lire ==>cette intervention <==

      • Partager sur Facebook
      • Partager sur Twitter
      Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
        27 juillet 2020 à 13:29:05

        Merci pour le conseil ! J'ai attentivement lu ton conseil et je me suis rendu compte de ce gros souci de conception dans mon projet... Il se trouve que la majeur partie de mes classes sont génériques et héritent d'autres classes abstraites. Il faut que je revois cet aspect du code. Je pense donc supprimer tout lien entre les classes génériques et les classes abstraites dont elles dérivent. J'ai commencé à m'informer sur le concept de "type erasure", et je m'y attaquerais peut-être quand j'aurais assez manipulé de code basé sur ce concept.

        • Partager sur Facebook
        • Partager sur Twitter

        [héritage] expected template-name befor '<' token

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown