5

依存関係の問題があります。と の 2 つのクラスがGraphicありImageます。それぞれに独自の .cpp および .h ファイルがあります。私はそれらを次のように宣言しています:

Graphic.h:


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

Image.h:


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

コンパイルしようとすると、次のエラーが発生します。

    Image.h:12: エラー: '{' トークンの前にクラス名が必要です

Graphicfromの前方宣言を削除するとImage.h、次のエラーが発生します。

    Image.h:13: エラー: 不完全なタイプ 'struct Graphic' の無効な使用
    Image.h:10: エラー: 'struct Graphic' の前方宣言
4

5 に答える 5

12

これは私のために働いた:

Image.h:

#ifndef IMAGE_H
#define IMAGE_H

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

};

#endif

グラフィック.h:

#ifndef GRAPHIC_H
#define GRAPHIC_H

#include "Image.h"

class Graphic {
};

#endif

次のコードは、エラーなしでコンパイルされます。

#include "Graphic.h"

int main()
{
  return 0;
}
于 2008-10-31T12:27:37.127 に答える
5

Image.h をインクルードしたり、Graphic.h に Image を前方宣言したりする必要はありません。これは循環依存です。Graphic.h が Image.h の何かに依存している場合は、それを 3 番目のヘッダーに分割する必要があります。(Graphic に Image メンバーがある場合、それは機能しません。)

于 2008-10-31T12:14:02.427 に答える
4

Graphic.h は image.h をインクルードする必要はなく、Image クラスを前方宣言する必要もありません。また、(必要に応じて) そのクラスを定義するファイルを #include するため、Image.h は Graphic クラスを前方宣言する必要はありません。

Graphic.h:

class Graphic {
  ...
};

Image.h:

#include "Graphic.h"
class Image : public Graphic {
  ...
};
于 2008-10-31T12:31:28.320 に答える
1

Image は Graphic を拡張するため、Graphic.h ファイルに含まれる Image を削除します。

Graphic.h

class Graphic {
  ...
};
于 2008-10-31T12:14:37.013 に答える
0

最初にこれを削除します。クラスから継承するには、常に完全なクラス定義を使用できるようにする必要があります。

class Graphic;

次に、Graphic.h から Image へのすべての参照を削除します。通常、親はその子について知る必要はありません。

于 2008-10-31T12:15:18.963 に答える