从派生类中的已转换通用指针访问成员会导致访问冲突

时间:2016-09-03 10:07:19

标签: c++ inheritance casting access-violation

所以我有一个名为" TestScript"它来自基类"脚本"。 "脚本"有一个名为parent的成员,它是一个通用指针。 在" TestScript"我有一个" GameObject"叫做#34; parentObj"。

所以我要做的是从"脚本"中转换通用指针。基类进入" parentObj"成员并访问一个如果它的" GameObject"成员,但这会导致访问冲突。

我已经通过代码并确认了我访问"名称" " GameObject"的成员type是发生错误的地方。

以下是代码:

"脚本"类定义(In" Objects.cpp"):

class Script
{
public:
    void* parent = NULL; // The generic pointer
    virtual void Initialize() {} // Not used
    virtual void Update() {}
    virtual void OnDestruction() {} // Also not used
};

" TestScript"类定义:

#include "Objects.cpp"

class TestScript : public Script
{
public:
    GameObject *parentObj = static_cast<GameObject*>(parent); // Casting...
    TestScript() {}
    void Update() override
    {
        std::cout << parentObj->name << std::endl; // Access violation here.
    }
};

&#34; GameObject&#34; type也在&#34; Objects.cpp&#34;

中定义

通用指针自动设置为&#34; GameObject&#34;使用已声明的&#34; GameObject&#34;中的 this 关键字在其他地方。

1 个答案:

答案 0 :(得分:0)

可能,你设置了#34;父母&#34;代码GameObject *parentObj = static_cast<GameObject*>(parent)之后的值;执行(如果我没有错,它在基础构造函数之后和派生类ctor之前执行)

考虑使用函数:

GameObject* GetparentObj ()
{
    return static_cast<GameObject*>(parent);
}