언리얼 4.6 이후 C++ Class 를 생성하면 Body 에 GENERATED_UCLASS_BODY 대신에 GENERATED_BODY 가 자동으로 채워진다. 4.6 릴리즈 노트에도 GENERATED_UCLASS_BODY 대신에 GENERATED_BODY 사용하라고 하는데 FObjectInializer 를 parameter 로 받는 constructor 에서 컴파일 오류가 나서 예전 방식대로 사용하고 있었다.

 

// header 

 

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 를 명시적으로 해주면 상관없는 문제였다.

 

UCLASS()

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 를 이용해야겠다.

 

참고 :

언리얼 4.6 릴리즈 노트

C2084 관련 오류 답변

728x90

+ Recent posts