UPROPERTY() 的类关键字

问题描述 投票:0回答:1

我是虚幻引擎的新手,正在研究游戏领域的 C++ 开发。现在我读了一个教程,我应该创建一个 AMyPawn 和 UPawnMovementComponent 来附加它。

这是从 APawn 派生的类的定义,我想为它添加一些属性,就像我们在 UE 中通常做的那样


UCLASS()
class V4_FYRSTI_API AMyPawn : public APawn
{
    GENERATED_BODY()

public:
    // Sets default values for this pawn's properties
    AMyPawn();

    UPROPERTY(EditAnyWhere)
    class UCustomMovementComponent* Movement; // class KeyWord + Type + varName

    UPROPERTY()
    class UParticleSystemComponent* ParticleComp; // class KeyWord + Type + varName

    UPROPERTY()
    UStaticMeshComponent* VisualMesh; // Just Type + varName

    virtual UPawnMovementComponent* GetMovementComponent() const override;
protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public: 
    // Called every frame
    virtual void Tick(float DeltaTime) override;


我发现很有趣的是,我应该通过类型词和变量名来声明 StaticMesh 实例,但是粒子或运动组件的另一个字段我必须在开头添加“class”关键字,为什么?

我认为它可能与“类引用变量”有关,因为我们有“对象引用变量”,但是当我尝试将“class”关键字添加到另一个字段时,它根本不会带来任何变化或使项目崩溃。

c++ class oop unreal-engine4
1个回答
0
投票

在 99.999% 的情况下,不需要

class
关键字。但是 C++ 继承了 C 的一个“功能”,其中类和结构标记名称放置在它们自己的命名空间中(这与 C++
namespace
不同),因此您可以拥有一个名为
Foo
的类,但也可以拥有一个变量名为
Foo
。然后你需要区分类和变量,这是通过在声明中添加
class
关键字来完成的。

举个例子:

class Foo { ... };

int main()
{
    int Foo = 5;  // Declare a variable of type int, named Foo

    class Foo bar;  // Declare a variable of type class Foo, named bar
}
© www.soinside.com 2019 - 2024. All rights reserved.