다른 헤더 파일의 클래스를 어떻게 상속합니까?
-
05-07-2019 - |
문제
나는 의존성 문제가 있습니다. 두 가지 수업이 있습니다. 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에서 이미지에 대한 모든 참조를 제거하십시오. 부모는 일반적으로 자녀를 알 필요가 없습니다.
제휴하지 않습니다 StackOverflow