Frage

Ich habe Abhängigkeitsstörungen. Ich habe zwei Klassen: Graphic und Image. Jeder hat seine eigene CPP und H-Dateien. Ich erklärte ihnen, wie folgt:

Graphic.h:


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

Image.h:
    


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

Wenn ich zu kompilieren versuchen, erhalte ich folgende Fehlermeldung:

    Image.h:12: error: expected class-name before ‘{’ token

Wenn ich die Vorwärts-Erklärung Graphic von Image.h entfernen bekomme ich folgende Fehlermeldung:

    Image.h:13: error: invalid use of incomplete type ‘struct Graphic’
    Image.h:10: error: forward declaration of ‘struct Graphic’
War es hilfreich?

Lösung

Das funktioniert für mich:

Image.h:

#ifndef IMAGE_H
#define IMAGE_H

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

};

#endif

Graphic.h:

#ifndef GRAPHIC_H
#define GRAPHIC_H

#include "Image.h"

class Graphic {
};

#endif

Der folgende Code kompiliert ohne Fehler:

#include "Graphic.h"

int main()
{
  return 0;
}

Andere Tipps

Sie brauchen nicht Image.h oder vorwärts declare Bild in Graphic.h aufzunehmen - das ist eine zirkuläre Abhängigkeit. Wenn Graphic.h auf irgendetwas in Image.h hängt benötigen Sie, dass in einem dritten Kopf aufzuschlüsseln. (Falls Grafik ein Bildelement, das gerade nicht zur Arbeit gehen.)

Graphic.h muss nicht image.h enthalten, und es muss nicht zu übermitteln, die Image-Klasse deklariert. Auch dann, wenn Image.h nicht brauchen weiterleiten die Grafik Klasse deklarieren, da Sie die Datei # include, die diese Klasse definiert (wie es sein muss).

Graphic.h:

class Graphic {
  ...
};

Image.h:

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

Seit Bild Grafik erstreckt, entfernen Sie die Aufnahme von Bild in Ihrer Graphic.h Datei.

Graphic.h

class Graphic {
  ...
};

Zuerst diese entfernen, müssen Sie immer die vollständige Klassendefinition zur Verfügung, um von einer Klasse zu erben:

class Graphic;

Zweitens Entfernen Sie alle Verweise auf Bild von Graphic.h. Die Eltern müssen in der Regel nicht von seiner Childs kennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top