문제

나는 의존성 문제가 있습니다. 두 가지 수업이 있습니다. 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: error: expected class-name before ‘{’ token

전달 선언을 제거하면 Graphic ~에서 Image.h 다음 오류가 발생합니다.

    Image.h:13: error: invalid use of incomplete type ‘struct Graphic’
    Image.h:10: error: forward declaration of ‘struct Graphic’
도움이 되었습니까?

해결책

이것은 나를 위해 효과가있었습니다.

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

다음 코드는 오류없이 컴파일합니다.

#include "Graphic.h"

int main()
{
  return 0;
}

다른 팁

Graphic.h에 image.h 또는 앞으로 선언 이미지를 포함 할 필요가 없습니다. 이는 원형 의존성입니다. graphic.h가 이미지의 모든 것에 의존하는 경우,이를 세 번째 헤더로 나누어야합니다. (그래픽에 이미지 멤버가있는 경우 작동하지 않을 것입니다.)

graphic.h는 image.h를 포함 할 필요가 없으며 이미지 클래스를 선언 할 필요가 없습니다. 또한 image.h는 해당 클래스를 정의하는 파일을 #include하므로 그래픽 클래스를 선언 할 필요가 없습니다.

Graphic.h:

class Graphic {
  ...
};

Image.h:

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

이미지가 그래픽을 확장하므로 Graphic.h 파일에 이미지 포함을 제거하십시오.

Graphic.h

class Graphic {
  ...
};

먼저 이것을 제거하려면 클래스에서 상속하기 위해 항상 완전한 클래스 정의를 사용할 수 있어야합니다.

class Graphic;

둘째, Graphic.h에서 이미지에 대한 모든 참조를 제거하십시오. 부모는 일반적으로 자녀를 알 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top