언리얼 4.6 이후 C++ Class 를 생성하면 Body 에 GENERATED_UCLASS_BODY 대신에 GENERATED_BODY 가 자동으로 채워진다. 4.6 릴리즈 노트에도 GENERATED_UCLASS_BODY 대신에 GENERATED_BODY 사용하라고 하는데 FObjectInializer 를 parameter 로 받는 constructor 에서 컴파일 오류가 나서 예전 방식대로 사용하고 있었다.
UCLASS()
class OldClass : public UObject
{
GENERATED_UCLASS_BODY()
};
UCLASS()
class NewClass : public UObject
{
GENERATED_BODY()
};
// cpp
OldClass::OldClass(const class FObjectInitializer& PCIP)
{
}
// error C2084 : NewClass::NewClass 함수가 이미 본문에 있습니다.
NewClass::NewClass(const class FObjectInitializer& PCIP)
{
}
GENERATED_BODY() 를 사용할 경우 UnrealBuildTool 에서 자동으로 constructor 를 declaration & define 해주는 코드를 생성해서 발생한 문제였다. Class 선언에 constructor 를 명시적으로 해주면 상관없는 문제였다.
class NewClass : public UObject
{
GENERATED_BODY()
NewClass(const class FObjectInitializer& PCIP);
};
// cpp
// error C2084 : NewClass::NewClass 함수가 이미 본문에 있습니다.
NewClass::NewClass(const class FObjectInitializer& PCIP)
{
}
GENERATED_BODY 가 뭐 몇몇 향상이 있어 사용하라고 하니 앞으로는 GENERATED_BODY 를 이용해야겠다.
참고 :