7
votes

"Type élaboré fait référence à Typef" Erreur lors de la tentative d'amende d'amitié

Disons que j'ai la pièce de code suivante (une simple hiérarchie de classe CRTP). Je souhaite tapedef le type de classe de base pour me sauver taper (dans mon code actuel, j'utilise le type de classe de base plus d'une fois et la classe de base prend plusieurs paramètres de modèle), et j'ai besoin de lier d'amitié la classe de base car je veux garder La mise en œuvre privée. xxx

clang dit: xxx

Comment puis-je résoudre ce problème? J'ai remarqué que je pouvais simplement taper le tout simplement pour la déclaration de classe d'amis et cela fonctionne bien, mais même un petit peu de code dupliqué me fait sentir mal à l'aise, alors je cherche une solution "appropriée" plus élégante .


0 commentaires

3 Réponses :


11
votes

Je crois que cela n'est pas possible avec C ++ 03, mais était ajouté à C ++ 11 dans lequel vous pouvez simplement omettre le mot-clé : xxx


1 commentaires

Je reçois la même erreur sur une ligne qui n'utilise pas d'ami, mais une énumération statique ..: statique Enum cglinecap fl_quartz_line_cap_ = kcglinecapbutt; toute suggestion sur la manière de résoudre ce problème?



3
votes

Activer C ++ 11 Seulement et utiliser ami BaseType

Vous ne pouvez pas utiliser de classe d'amis sur TLECDEF en C ++ 03.

Un spécificateur de type élaboré doit être utilisé dans une déclaration d'ami pour une classe (101)

101) La clé de classe du spécificateur de type élaboré est requise. xxx


0 commentaires

1
votes

Vous pouvez réellement le faire en C ++ plus tôt que C ++ 11, mais il nécessite une solution de contournement assez élaborée (HAHA), le long des lignes de, 1er déclarer cette "assistante": xxx

Ensuite, votre déclaration de votre ami: xxx


0 commentaires