2016-09-03 5 views
-2

私は "Script"という基本クラスから派生した "TestScript"というクラスを持っています。 "Script"には、汎用ポインターであるparentというメンバーがあります。 "TestScript"には "parentObj"というタイプの "GameObject"タイプのメンバーがあります。派生クラスのキャストジェネリックポインタのメンバにアクセスするとアクセス違反が発生する

だから、 "Script"基本クラスから "parentObj"メンバへジェネリックポインタをキャストし、 "GameObject"メンバであればアクセスしますが、これによりアクセス違反が発生します。

私はコードをステップ実行し、 "GameObject"タイプの "name"メンバーにアクセスする行がエラーの発生場所であることを確認しました。ここ

コードである:( "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. 
    } 
}; 

「ゲームオブジェクト"型も" Objects.cpp "で定義されています

汎用ポインタは自動的に" Gam eObject "キーワードを既に宣言された" GameObject "のどこか他の場所から取得します。

+2

、このような問題を解決するための適切なツールは、あなたのデバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

+1

ヌルポインタのメンバにアクセスするとエラーが発生することはありませんか? – IllidanS4

+0

@ IllidanS4あなたは質問をより徹底的に読む必要があります。下部にあるように(多分私は正しいとは言えませんでした)、ポインターがタイプ "GameObject"のオブジェクトに設定されていると述べました。 –

答えて

0

おそらく、コードの後に​​ "親"値を設定します。GameObject *parentObj = static_cast<GameObject*>(parent); (私は間違っていないよ場合、それは基本コンストラクタの後や、派生クラスのctorの前に実行されます)が実行される

は、機能の使用を検討してください:

GameObject* GetparentObj() 
{ 
    return static_cast<GameObject*>(parent); 
} 
関連する問題