🚀 C++ 클래스의 순수 가상 함수
virtual void Foo() = 0;
실행 초기의 런타임 과정에서 언리얼 오브젝트마다 클래스 정보와 함께 언리얼 오브젝트의 인스턴스(Class Default Object)가 생성된다.
따라서 UClass 내에 순수 가상 함수를 그냥 선언할 경우 인스턴스화할 수 없기 때문에 컴파일 에러가 발생한다!
이럴 때, 아래처럼 언리얼 매크로를 활용하면 컴파일 에러를 해결하고 순수 가상 함수를 선언할 수 있다.
🚀 해결 코드
#include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "Weapon.generated.h" // "추상 베이스 클래스" 선언 UCLASS(Abstract) class PHOLDERON_API AWeapon : public AActor { GENERATED_BODY() protected: // "순수 가상 함수" 선언 virtual void Foo() PURE_VIRTUAL(AWeapon::Foo, ;); }
🚀 (참고) 추상 블루프린트 클래스 만들기
- 'Class Settings → Class Options → Generate Abstract Class'를 활성화한다.
🚀 반환형이 있는 경우
virtual bool IsValid() PURE_VIRTUAL(MyClass::IsValid, return false;);
언리얼 포럼 질문 - How do I implement Pure Virtual Methods?
https://forums.unrealengine.com/t/how-do-i-implement-pure-virtual-methods/280323
이득우 님의 블로그 - 클래스 기본 객체 (Class Default Object)
https://blog.naver.com/destiny9720/220934112532
언리얼 도큐먼트 - 클래스 지정자
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/GameplayArchitecture/Classes/Specifiers/