• Unreal Engine 4 C UCLASS构造函数易出错分析

    • GENERATED_BODY
    • GENERATED_UCLASS_BODY

在Unreal Engine 4的任意类中通常会见到两个宏:

  • GENERATED_BODY()
  • GENERATED_UCLASS_BODY()

在一篇教程中有时候会有这样的说法:

这个说法并不严谨,并没有完全解释UCLASS_BODY()和BODY()区别。

具体分析:

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

下面来说明下两种方法的不同:


1.GENERATED_BODY()

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

  • MyCharacter.h
UCLASS() class MYCHARACTER_API AMyCharacter : public ACharacter {     GENERATED_BODY()  public:     AMyCharacter(const FObjectInitializer& ObjectInitializer);  };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

  • MyCharacter.cpp
AMyCharacter::AMyCharacter(const FObjectInitializer& ObjectInitializer)     : Super(ObjectInitializer) {  }
  • 1
  • 2
  • 3
  • 4
  • 5

如果不去声明自己的构造函数,就会报错:

MyCharacter.cpp(7): error C2084: 函数“AMyCharacter::AMyCharacter(const FObjectInitializer &)”已有主体 
MyCharacter.h(14): note: 参见“{ctor}”的前一个定义


1.GENERATED_UCLASS_BODY()

如果定义的是GENERATED_UCLASS_BODY(),那么意味着我使用父类的构造函数,也就是说,我不需要为自己声明构造函数,直接去实现父类声明那个构造函数。

  • MyCharacter.h
UCLASS() class MYCHARACTER_API AMyCharacter : public ACharacter {     GENERATED_UCLASS_BODY() };
  • 1
  • 2
  • 3
  • 4
  • 5

那么在CPP文件中去实现,而不需要在H里面去声明,编译通过!

  • MyCharacter.cpp
AMyCharacter::AMyCharacter(const FObjectInitializer& ObjectInitializer)     : Super(ObjectInitializer) {  }
  • 1
  • 2
  • 3
  • 4
  • 5

如果还去声明自己的构造函数,就会报错:

UCLASS() class MYCHARACTER_API AMyCharacter : public ACharacter {     GENERATED_UCLASS_BODY()  public:     AMyCharacter(const FObjectInitializer& ObjectInitializer);  };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

error C2535: “AMyCharacter::AMyCharacter(const FObjectInitializer &)”: 已经定义或声明成员函数 
note: 参见“AMyCharacter::AMyCharacter”的声明

完结..转自 http://blog.csdn.net/qq_20309931/article/details/52964391

转载于:https://www.cnblogs.com/huojiaoqingchun0123/p/7742345.html

Unreal Engine 4 C++ UCLASS构造函数易出错分析相关推荐

  1. Unreal Engine 4 学习总动员读书笔记(2)

    Unreal Engine 4 学习总动员读书笔记(2) 参考<Unreal Engine 4 学习总动员>,之前已经将视频的操作一步步的完成,但并没有对知识点进行深入理解和提取,本章针对 ...

  2. UNREAL ENGINE 4.13 正式发布!

    这次的版本带来了数百个虚幻引擎 4 的更新,包括来自 GitHub 的社区成员们提交的 145 个改进!感谢所有为虚幻引擎 4 添砖加瓦贡献的人们: alk3ovation, Allegorithmi ...

  3. Unreal Engine使用C++入门示例

    转载自52VR 原文章链接http://www.52vr.com/article-639-1.html epic games宣布ue4免费使用之后,吸引了大批看好VR和AR前景的游戏开发者. 不过国内 ...

  4. Unreal Engine 4 学习总动员读书笔记

    Unreal Engine 4 学习总动员读书笔记 参考<Unreal Engine 4 学习总动员>,按照里面的录制的视频一步一步的操作,并将操作的流程和关键截图保存下来,方便后面的再次 ...

  5. UNREAL ENGINE 4.12 正式发布!下载地址

    UNREAL ENGINE 4.12 正式发布! 下载地址:https://www.unrealengine.com/ Alexander Paschall 在 June 1, 2016 |功能新闻社 ...

  6. 【新手必读】Unreal Engine 4 C++入门教程(上)

    原文|<Unreal Engine 4 C++ Tutorial> 作者|Tommy Tran Feb 6 2018 | 翻译 开发游戏的老王 阅读时长|25分钟 内容难度|入门 在本教程 ...

  7. 【UE4官方文档翻译】Unreal Engine 4 For Unity Developers (针对Unity开发者的UE4)

    ------------------------------------------------------------------ 说明:       本翻译是参考.修正.整理后的文档.如有错误,请 ...

  8. Unreal Engine 4添加自定义Settings到项目设置

    http://blog.csdn.net/shangguanwaner/article/details/50300349 Unreal Engine 4添加自定义Settings到项目设置 在开发的过 ...

  9. 从Unreal Engine 3到Unreal Engine 4

    http://blog.csdn.net/neil3d/article/details/46723589 Unreal Engine 4发布好长好长时间了,直到最近才有时间仔细去看一下. TimSwe ...

  10. Unreal Engine C++ 入门01

    1.UMG UMG 向关卡增加UI控件 比如按钮和文本之类 打开unreal engine 我安装的是 C++开发的话有同时安装vs2019 VS2019的话安装有注意组件问题,不然创建会报错. wi ...

最新文章

  1. Redis6安装配置集群cluster以及集群宕机注意事项
  2. 内存溢出和内存泄漏的区别、产生原因以及解决方案
  3. 【Android】窗口构成 应用窗口+系统窗口
  4. MySQL命令之mysqlhotcopy -- 热备份
  5. 《React Native跨平台移动应用开发》PDF电子书分享
  6. tmpfiles.d导致的unix:///tmp/supervisor.sock no such file坑(待续)
  7. 用python写WordCount的MapReduce代码
  8. 这些年,这些ACM大佬-施韩原访谈
  9. -XX:NewRatio 命令
  10. 《非线性成长》阅读笔记
  11. 数值计算与MATLAB微积分
  12. ICPR 2022 | 多模态字幕识别竞赛正式启动!
  13. .obj文件格式与.mtl文件格式(转)
  14. 关于我自己 a propos de moi
  15. 企业遇到3C审厂不符合项应该如何整改?
  16. mysql如何查询昨天的数据
  17. Tomoyo Fighter - Perfect 界面汉化+修改器
  18. AI人工智能会取代项目经理吗?
  19. GJB5000A与CMMI的区别与共性
  20. Mybatis使用教程

热门文章

  1. 张亚勤新作《变革中的思索》谈高科技人才管理
  2. 末日帝国——Agile公司的困境 (5)
  3. 21 意境级讲解 共指消解的方法
  4. 5.10 Memory Networks 记忆网络的应用与方法
  5. 计算机网络工程安装,一种计算机网络工程用施工平台的制作方法
  6. linux主备dns切换时间,linux下主从DNS配置相关知识(二)
  7. matlab邻域平均,数字图像处理邻域平均法滤波实验报告matlab实现
  8. L1-050 倒数第N个字符串 (15 分)—团体程序设计天梯赛
  9. SQlite数据库框架:LitePal
  10. vmware虚拟机挂载Windows磁盘的两种方法