Maison >développement back-end >C++ >Comment puis-je déclarer en avant des classes C imbriquées ?

Comment puis-je déclarer en avant des classes C imbriquées ?

DDD
DDDoriginal
2024-12-04 09:16:11648parcourir

How Can I Forward Declare Nested C   Classes?

Déclaration directe des classes internes

Il peut être souhaitable de référencer des classes imbriquées sans inclure leur fichier d'en-tête de définition. Cependant, tenter de déclarer des classes internes en dehors de leur classe conteneur peut entraîner des erreurs de compilation.

Considérez l'exemple suivant :

class Container {
public:
    class Iterator {
        ...
    };

    ...
};

class Foo {
    void Read(Container::Iterator& it);
};

La compilation de ce code entraînera des erreurs dues à l'incomplétude type de conteneur et le non déclaré variable.

Solution

Malheureusement, il n'est pas possible de déclarer des classes internes en dehors de leur classe conteneur. Le standard C ne permet pas cette syntaxe. Par conséquent, résoudre ce problème nécessite des solutions alternatives :

  • Déplacer la classe interne à l'extérieur : Déclarez la classe interne comme classe non imbriquée. Cela lui permet d'être déclaré et inclus séparément.
  • Réorganiser les déclarations : Si possible, réorganisez les déclarations de classe afin que la classe interne soit entièrement définie avant que des références y soient faites.
  • Utiliser une classe de base : Créez une classe de base commune dont la classe interne peut hériter et que la fonction peut transmettre en paramètre. Cela permet à la fonction d'accepter une référence à la classe de base, même si le type de classe interne concret n'est pas connu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn