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 ...
随机推荐
- Macro-Micro Adversarial Network for Human Parsing
Macro-Micro Adversarial Network for Human Parsing ECCV-2018 2018-10-27 15:15:07 Paper: https://arxiv ...
- vue 项目 使用sass
1,使用save会在package.json中自动添加. npm install node-sass --save-dev npm install sass-loader --save-dev 注: ...
- 【转】 ISP-黑电平校正(BLC)
转自:https://blog.csdn.net/xiaoyouck/article/details/72824534 介绍黑电平(Black Level Correction)也就是黑色的最低点,以 ...
- CSS设置表格TD宽度布局
使用表格布局时,对单元格的宽度控制很伤脑筋,所以查阅资料整理如下: 一.表格布局table-layout 语法: table-layout : auto | fixed 取值: auto : 大多数 ...
- inline元素、block元素、inline-block元素
inline 内联元素:是不可以控制宽和高.margin等:并且在同一行显示,不换行,直到该行排满. block 块级元素:是可以控制宽和高.margin等,并且会换行.块级对象元素会单独占一行显示, ...
- sass compass config.rb
require 'compass/import-once/activate' # Require any additional compass plugins here. # Set this to ...
- Win10系列:C#应用控件进阶2
矩形 若要绘制矩形需要用到Rectangle元素,通过指定Rectangle元素的Width和Height属性值来确定矩形的尺寸.而设置RadiusX和RadiusY属性值能得到圆角的矩形,这两个属性 ...
- nginx搭建以及其配置文件
nginx搭建: 参考link:https://blog.csdn.net/wxyjuly/article/details/79443432 nginx配置文件详解: 参考link:https://w ...
- Mosquitto-1.5在Linux上的安装以及Android客户端的实现
一.关于MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的" ...
- jmeter接口测试基础知识2.0
如何在jmeter中上传文件:选择post方式后,选择FILES Upload--文件名称栏点击浏览,值栏写file,如果查看的时候报错,就在MIME类型中写TXT 参数化:添加学生信息:进行参数化1 ...