2011-08-15 6 views
0

編集で用事、解決...私は宣言したのだタイプClassBのクラスC ....だから、の単純なポインタ質問

私は、PointAという名前のポインタを、持っていますクラスClassAと呼ばれるクラスです。

A級ClassBの両方タイプという変数を有するクラスC、から誘導されます。コードのセクションで

Iは、A級PointA変数にClassBのの新しいインスタンスを割り当てます。ポインタはクラスCを指すように宣言されています。そのうちクラスBは、

私は、ビットのように見える、OtherClass(無関係)で、機能を持っている:私が正しくClassBののインスタンスへPointAポイントということを知っている

void OtherClass::function_name(ClassA* A,ClassB* B) { 
    B->type; //displays the correct value of type 

    A->PointA->type; //displays the wrong value of type 
    (A->PointA)->type; //displays the wrong value of type 
} 

私はポインタを使用する場合タイプの不正な値を取得するために、間違った何をしているのですか?

+1

ClassAとClassBはどのように関連していますか?クラス定義を含め、すべてのコードを投稿する必要があります。 –

+2

'A-> PointA-> type'を試しましたか? –

+0

十分なコードを投稿していません。 http://sscce.org/ –

答えて

0

私は、あなたがPointAを設定する際に不正なキャストを行ったと思われます。 ClassBはPointAが指すように定義されたもののサブクラスである必要があります(typeof(* ClassA-> PointA))。そうしないと、何をしようとしても動作しません。

0

コードによれば、ClassAClassBの両方にtypeというメンバーがあります。 PointAのオブジェクトをClassAオブジェクトまたはClassBオブジェクトにすることができるため、これらのクラス間に親子関係が存在する必要があります(存在しますか?)。そうであれば、完全に無関係の2つのメンバー、つまりClassAClassBのメンバーを作成していないことを確認してください。 ClassB::typeを調べることを期待していますが、実際にはClassA::typeを調べるため、別の(「間違った」)値が表示されます。

クラスがどのように宣言されているかを表示するには、コードをさらに投稿する必要があります。あなたが投稿したものでは、野生の推測しかできません...その上に、投稿したコードは明らかに「偽」です。つまり、あなたが実験したコードではありません。 ClassA->PointA->type式はコンパイルされません。実際のコードを投稿してください。

+0

申し訳ありません、はいです。 ClassC ...その詳細を追加するのを忘れてしまった。固定投稿。 – Matthew