zoukankan      html  css  js  c++  java
  • Unreal Engine 4 C++ UCLASS构造函数易出错分析


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

    • GENERATED_BODY()
    • GENERATED_UCLASS_BODY()

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

    11

    这个说法并不严谨,并没有完全解释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

  • 相关阅读:
    【题解】[Codeforces 407B] Long Path / doughnut【20201030 CSP 模拟赛】【DP】
    Powerful number 筛略解
    【题解】[Codeforces 1400E] Clear the Multiset
    安卓中Activity的onStart()和onResume()的区别是什么
    Android TextView自动换行文字排版参差不齐的原因
    Android 异步加载解决方案
    Android Camera 相机程序编写
    关于android中EditText边框的问题 下划线
    getDimension,getDimensionPixelOffset和getDimensionPixelSize的一点说明
    android dimens 读取 px&dp问题
  • 原文地址:https://www.cnblogs.com/huojiaoqingchun0123/p/7742345.html
Copyright © 2011-2022 走看看