Question

J'ai des problèmes de dépendance. J'ai deux classes: Graphic et Image . Chacun a ses propres fichiers .cpp et .h. Je les 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: error: expected class-name before ‘{’ token

Si je supprime la déclaration de transfert de graphique de Image.h , le message d'erreur suivant s'affiche:

    Image.h:13: error: invalid use of incomplete type ‘struct Graphic’
    Image.h:10: error: forward declaration of ‘struct Graphic’
Était-ce utile?

La solution

Cela a fonctionné pour moi:

Image.h:

#ifndef IMAGE_H
#define IMAGE_H

#include "Graphic.h"
class Image : public Graphic {

};

#endif

Graphique.h:

#ifndef GRAPHIC_H
#define GRAPHIC_H

#include "Image.h"

class Graphic {
};

#endif

Le code suivant est compilé sans erreur:

#include "Graphic.h"

int main()
{
  return 0;
}

Autres conseils

Il n'est pas nécessaire d'inclure Image.h ou de déclarer en avant Image dans Graphic.h - il s'agit d'une dépendance circulaire. Si Graphic.h dépend de quoi que ce soit dans Image.h, vous devez le scinder en un troisième en-tête. (Si Graphic a un membre Image, cela ne fonctionnera tout simplement pas.)

Graphic.h n'a pas besoin d'inclure image.h, et il n'a pas besoin de transmettre en avant la classe Image. De plus, Image.h n’a pas besoin de déclarer en aval la classe Graphic puisque vous # incluez le fichier qui définit cette classe (comme vous devez).

Graphic.h:

class Graphic {
  ...
};

Image.h :

#include "Graphic.h"
class Image : public Graphic {
  ...
};

Puisque Image étend Graphic, supprimez l'inclusion de Image dans votre fichier Graphic.h.

Graphic.h

class Graphic {
  ...
};

D'abord, supprimez ceci, vous devez toujours disposer de la définition de classe complète pour pouvoir hériter d'une classe:

class Graphic;

Deuxièmement, supprimez toutes les références à Image de Graphic.h. Le parent n'aura généralement pas besoin de connaître ses enfants.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top