Maison >développement back-end >C++ >Les classes imbriquées en C peuvent-elles être déclarées pour une utilisation en dehors de leur classe englobante ?

Les classes imbriquées en C peuvent-elles être déclarées pour une utilisation en dehors de leur classe englobante ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-01 15:57:10634parcourir

Can Nested Classes in C   Be Forward Declared for Use Outside Their Enclosing Class?

Déclarations avancées de classes imbriquées : une tâche impossible

En C, les classes internes peuvent être un moyen pratique d'organiser le code. Cependant, lorsque vous tentez de transmettre des objets de classe interne par référence en dehors de la définition de la classe englobante, des erreurs de compilation peuvent survenir. En effet, le compilateur exige que la classe interne soit entièrement définie ou déclarée avant son utilisation dans la fonction appelante.

Considérez le code suivant :

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

    ...
};

Si vous souhaitez passer un itérateur objet par référence dans une fonction en dehors de la portée de la classe Container, vous pouvez intuitivement essayer de déclarer la classe Iterator :

class Container::Iterator;

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

Cependant, cette approche échoue avec des erreurs de compilation dues au type inconnu Iterator.

Limitations de la déclaration directe

En C , les déclarations directes ne peuvent être utilisées que pour déclarer les classes elles-mêmes, pas leurs membres imbriqués . Cette restriction empêche la déclaration anticipée des classes internes.

Solutions

Pour résoudre ce problème, envisagez des stratégies alternatives :

  • Rendre la classe non imbriquée : Déplacez la classe Iterator en dehors de la classe Container afin qu'elle puisse être déclarée en avant indépendamment.
  • Réorganisez les déclarations de classe : Définissez entièrement la classe Iterator avant de l'utiliser dans la signature de fonction de la classe Foo.
  • Utilisez une classe de base commune : Créez une classe de base distincte dont la classe Iterator et la fonction de la classe Foo peuvent hériter. Cela vous permet de déclarer la classe de base commune et de transmettre les objets qui en dérivent par référence.

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