http://www.v5xy.com/?p=477

UE4 C++ UCLASS构造函数易出错分析
【UE4实用技能】GENERATED_BODY和GENERATED_UCLASS_BODY_第1张图片

网上的错误说法,并没有完全解释UCLASS_BODY()和BODY()区别。

【UE4实用技能】GENERATED_BODY和GENERATED_UCLASS_BODY
【UE4实用技能】GENERATED_BODY和GENERATED_UCLASS_BODY
以上两张截图分别是定义了GENERATED_BODY()和GENERATED_UCLASS_BODY()。

具体分析:

首先为什么有两个宏定义的区别,主要是考虑到,继承父类之后,在于是否需要对父类的东西有所改动,构造函数的初始化亦是如此。

一、GENERATED_BODY()

如果定义的是GENERATED_BODY(),那么意味着我不需要使用父类的构造函数,也就是说,我不能直接使用父类的声明,但是,我需要去实现的时候,我就必须自己去声明,否则就会报错。

【UE4实用技能】GENERATED_BODY和GENERATED_UCLASS_BODY

然后就可以在CPP中实现自己声明的这个构造函数,编译通过。

如果不去声明自己的构造函数,就会报错:
【UE4实用技能】GENERATED_BODY和GENERATED_UCLASS_BODY

二、GENERATED_UCLASS_BODY()

如果定义的是GENERATED_UCLASS_BODY(),那么意味着我使用父类的构造函数,也就是说,我不需要为自己声明构造函数,直接去实现父类声明那个构造函数。
【UE4实用技能】GENERATED_BODY和GENERATED_UCLASS_BODY
那么在CPP文件中去实现,而不需要在H里面去声明,编译通过!

如果还去声明自己的构造函数,就会报错:
【UE4实用技能】GENERATED_BODY和GENERATED_UCLASS_BODY
也就是这个最常见的错误。

【UE4实用技能】GENERATED_BODY和GENERATED_UCLASS_BODY
完结。

也就是这个最常见的错误。

完结。