【问题标题】:Passing AActor reference into the nested object将 AActor 引用传递给嵌套对象
【发布时间】:2020-06-30 21:08:17
【问题描述】:

我想在嵌套对象中做一些 AActor 的逻辑,我需要通过引用传递这个 actor 以使其工作。不幸的是,我看不到在使用“&”时如何传递“this”的方法。谁能解释一下这是怎么回事?

ATestActor.h

class UHelper;
UCLASS()
class PROJECT_API ATestActor : public AActor
{
    GENERATED_BODY()
    
public: 
    ATestActor();

protected:
    virtual void BeginPlay() override;

public: 
    virtual void Tick(float DeltaTime) override;

    UPROPERTY()
    UHelper* Helper;
};

UCLASS()
class PROJECT_API UHelper : public UObject
{
    GENERATED_BODY()

public:
    void Help(ATestActor* &TestActor)
    {
        // Do some stuff with testActor
    }
};

ATestActor.cpp

//other stuff

void ATestActor::BeginPlay()
{
    Super::BeginPlay();
    Helper = NewObject<UHelper>();
    
    //How can i pass "this" to the method?
    //Helper->Help(&this);//incorrect
}

【问题讨论】:

    标签: c++ unreal-engine4


    【解决方案1】:

    &amp;this 创建一个指向指针的指针。您的函数Help 接受对指针的引用。调用Helper-&gt;Help(this); 应该可以工作,因为this 已经是一个指针,然后我们在调用Help 时通过引用传递ptr。

    编辑:

    实际上我忘了thisprvalue expression 并且prvalues 不能绑定到非const 左值引用。

    您可以执行以下操作来获取this ptr 的左值。

    auto* obj = this;
    Helper->Help(obj);
    

    【讨论】:

    • 我也应该以这种方式工作,但在这种情况下,我得到以下信息:“对 'ATestActor*' 类型的非 const 左值引用不能绑定到 'ATestActor*' 类型的右值”跨度>
    • 非常感谢!
    • 这个答案很有帮助,因为它解释了出了什么问题,但是 OP 应该考虑他为什么要通过引用传递指针 - 除非您打算更改指针,否则将其简单地作为指针传递应该是可取的. (你仍然可以“用 testActor 做一些事情”)
    • @BasinhetVeld 我同意。我不确定是否可以在答案中提出这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2020-10-08
    相关资源
    最近更新 更多