Unreal Engine 4 C++ UCLASS构造函数易出错分析
在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
Unreal Engine 4 C++ UCLASS构造函数易出错分析的更多相关文章
- 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove
本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...
- 从Unreal Engine 3到Unreal Engine 4
Unreal Engine 4公布好长好长时间了.直到近期才有时间细致去看一下. TimSweeney老大一句话"IF YOU LOVE SOMETHING, SET IT FREE&quo ...
- Unreal Engine 4 系列教程 Part 1:入门
原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:Shuchang Liu 本篇教程将引导你安装U ...
- Unreal Engine 4 RenderTarget制作Live Camera效果
Unreal Engine 4 RenderTarget制作Live Camera效果 先上效果: Live Camera我不知道怎么翻译.反正意思就是将一个摄影机的Image渲染到一个2D平面上. ...
- Unreal Engine 4 创建Destructible Mesh(可破坏网格)
Unreal Engine 4的物理引擎用的是PhysX. 支持网格破坏.布料.物理粒子等,非常强大.曾经须要编码才干完毕的工作,在Unreal Engine 4 中仅仅须要拖拖拽拽就完毕了,非常方便 ...
- 游戏音频技术备忘 (五)Wwise Unreal Engine 集成代码浅析 二
AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,一般来说用户创建的类总是拥有很多变量,因此 AkAmbientSound ...
- 游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)
在Engine\Plugins\Wwise\Source下为主要Wwise相关代码,AkAudio文件夹下为运行时相关代码,AudiokineticTools下为编辑器工具相关代码,Audiokine ...
- 游戏音频技术备忘 (三) 集成Wwise到Unreal Engine
当前受众较广的商业游戏引擎有 Unreal Engine.Unity.cocos2d-x等,在音频领域的第三方中间件则有Wwise.FMOD.Criware等,言多且烦,我们首先集成Wwise到 Un ...
- 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren
前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...
随机推荐
- FJUT3703 这还是一道数论题(二分 + hash + manacher 或者 STL + hash 或者 后缀数组 + hash)题解
Problem Description 最后来个字符串签个到吧,这题其实并不难,所需的算法比较基础,甚至你们最近还上过课. 为了降低难度,免得所有人爆零.这里给几个提示的关键字 :字符串,回文,二分, ...
- 字体转换网站——Font Squirrel
转载自:http://www.5imoban.net/jiaocheng/CSS3_HTML5/2016/0714/1735.html html5之前,只要稍微特殊点的字体,都必须做成图片,以免客户端 ...
- Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
不多说,直接上干货! 前期博客 Windows下的Python 3.6.1的下载与安装(适合32bits和64bits)(图文详解) 这是我自定义的Python 的安装目录 (D:\SoftWare\ ...
- (20)gevent协程
协程: 也叫纤程,协程是线程的一种实现,指的是一条线程能够在多任务之间来回切换的一 种实现,对于CPU.操作系统来说,协程并不存在 任务之间的切换会花费时间.目前电脑配置一般线程开到200会阻塞卡顿 ...
- Matlab:线性热传导(抛物线方程)问题
函数文件1:real_fun.m function f=real_fun(x0,t0) f=(x0-x0^2)*exp(-t0); 函数文件2:fun.m function f=fun(x0,t0) ...
- Java中char和String的相互转换
转自:http://blog.csdn.net/yaokai_assultmaster/article/details/52082763 Java中char是一个基本类型,而String是一个引用类型 ...
- 批量压缩 css js 文件 包含多个文件 自动识别
注意事项 css 注释压缩不会造成影响 因为是块注释 当然也可以选择去注释压缩 js 带注释压缩 要注意注意 注意 //行注释会造成 压缩后的代码在一行 导致注释后的代码都失效 ...
- 数据结构与算法之PHP排序算法(快速排序)
一.基本思想 快速排序又称划分交换排序,是对冒泡排序的一种改进,亦是分而治之思想在排序算法上的典型应用. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部 ...
- ID基本操作(出血的定义)(置入图片)(添加页面)5.15
出血区域就是会被裁掉的部分.防止打印出来裁剪出一个百边.查看文档的几种模式: 在一个文档里CTRL+C复制,CTRL+V粘贴.可在光标位置置入文本框架. 2.用文字工具在文本中单击,为了确定光标位置, ...
- 对聊天室项目的NABCD的分析
NABCD需求分析: 需求(N):我们的项目是制作一个局域网内的聊天室软件,为了解决一个公司或者小团体内小范围的局域的简单通讯问题,我们针对的需求是简单与安全. 做法(A):用Java来实现一个C/S ...