Comment avez-vous hériter d'une classe dans un autre fichier d'en-tête?
Je vais avoir des problèmes de dépendance. J'ai deux classes: Graphic
et Image
. Chacun a son propre .rpc et .h fichiers. Je déclare comme suit:
Graphic.h
:
#include "Image.h"
class Image;
class Graphic {
...
};
Image.h
:
#include "Graphic.h"
class Graphic;
class Image : public Graphic {
...
};
Lorsque j'essaie de compiler, j'obtiens l'erreur suivante:
Image.h:12: erreur: nom de classe avant de ‘{’ token
Si je retire la déclaration anticipée de Graphic
de Image.h
j'obtiens l'erreur suivante:
Image.h:13: erreur: invalid use of incomplète de type ‘struct Graphique Image.h:10: erreur: avant la déclaration de " struct Graphique
Comme il est en ce moment, qui doit être au travail. Quel compilateur que vous utilisez? Sont Image.h et Graphique.h les deux dans le même dossier sur le système de fichiers? Est-ce que votre compilateur de savoir où chercher pour eux?
Merci de ne pas modifier la question si mal: il annule toutes ces précieuses réponses. Plutôt de fournir un answuer vous-même, afin de garder le temps de la ligne intacte.
Je ne pouvais pas donner une réponse que je ne sais pas quelle est la réponse - au lieu de cela, j'ai changé la question, de sorte qu'elle était plus claire ce que j'essayais de le demander (les modifications proposées n'ont pas d'aide).
Je l'ai corrigé en passant par chaque trait fichier source et à me demander ce que comprend et déclarations ont été nécessaire et ce qui ne l'étaient pas, puis en supprimant celles qui ne l'étaient pas. Ensuite, il a compilé amende. Pas sûr que le problème était que je ne peux pas reproduire le défaut (il avait à faire avec un fichier séparé).
(annulée à la première révision)
Merci de ne pas modifier la question si mal: il annule toutes ces précieuses réponses. Plutôt de fournir un answuer vous-même, afin de garder le temps de la ligne intacte.
Je ne pouvais pas donner une réponse que je ne sais pas quelle est la réponse - au lieu de cela, j'ai changé la question, de sorte qu'elle était plus claire ce que j'essayais de le demander (les modifications proposées n'ont pas d'aide).
Je l'ai corrigé en passant par chaque trait fichier source et à me demander ce que comprend et déclarations ont été nécessaire et ce qui ne l'étaient pas, puis en supprimant celles qui ne l'étaient pas. Ensuite, il a compilé amende. Pas sûr que le problème était que je ne peux pas reproduire le défaut (il avait à faire avec un fichier séparé).
(annulée à la première révision)
OriginalL'auteur Steven Oxley | 2008-10-31
Vous devez vous connecter pour publier un commentaire.
Cela a fonctionné pour moi:
Image.h:
Graphique.h:
Le code suivant compile sans erreur:
OriginalL'auteur Claudiu
Vous n'avez pas besoin d'inclure l'Image.h ou déclarer avant de l'Image Graphique.h - c'est une dépendance circulaire. Si Le Graphique.h dépend sur quoi que ce soit dans l'Image.h vous avez besoin de partager qu'en un troisième en-tête. (Si le Graphique a une Image membre, qui n'est tout simplement pas aller travailler.)
OriginalL'auteur marijne
Graphique.h n'a pas besoin d'inclure l'image.h, et il n'a pas besoin de déclarer avant la classe Image. Aussi, L'Image.h n'a pas besoin de déclarer avant la classe Graphique puisque vous #inclure le fichier qui définit la classe (comme vous).
Graphic.h:
Image.h
:OriginalL'auteur John Dibling
Puisque l'Image s'étend Graphique, supprimer l'inclusion de l'Image dans votre Graphique.h fichier.
Graphic.h
Quel compilateur que vous utilisez? Je déteste le dire, WoMM, mais...
Également ajouter un en-tête des gardes, alors vous avez la meilleure solution.
OriginalL'auteur Bill the Lizard
D'abord supprimer cela, vous devez toujours avoir la complète la définition de la classe afin d'hériter d'une classe:
Deuxième, supprimer toutes les références à l'Image de Graphique.h. Le parent ne sera habituellement pas besoin de savoir son enfant.
OriginalL'auteur activout.se