2012-04-03 19 views
0

私は1つのオブジェクトを持つようにしようとしています。ポインタを持っているので、複数のクラスが同じオブジェクトで動作することができます。しかし、それが私に与えている唯一のものは、私が必要とする16進アドレスではなく1です。 マイコード:それを作成するためにポインタアドレスは16進数の代わりに1を返します

コード:それを使用して

SDL_Event event; 
EventHandler eh(&event); 

コード:

EventHandler::EventHandler(SDL_Event* eventpointer) 
{ 
    EventHandler::event = eventpointer; 
    //This code is to test the pointer: 
    std::cout << &EventHandler::event << std::endl; 
} 

出力:

1 
Process returned 0 (0x0) execution time : 0.092 s 

答えて

3

は、イベントのを印刷してみてください、ではありませんその住所:

std::cout << EventHandler::event << std::endl; 

実際には、テストケースに関するいくつかの珍しいことがあります。それらのすべてを修正、私はこれで終わる:

EventHandler::EventHandler(SDL_Event* eventpointer) : event(eventpointer) 
{ 
    //This code is to test the pointer: 
    std::cout << event << "\n"; 
} 

私が変わっものがあります:

  • は、コンストラクタ本体
  • プリントevent変数の値ではなく、そのアドレスに値を割り当てるには、初期化リストを優先します。 eventの値は、eventpointerの値と同じです。これは、元のSDL_Eventオブジェクトのアドレスと同じです。
  • スコープ修飾子を使用しないでください。クラスの機能の中で、メンバーを単に名前で参照することができます。


:私はそれが著者の真の意図とは無関係であることが判明したので、脇に実際の質問に答えるつもりです。ポインタ値の代わりに 1と表示される実際の理由は次のとおりです。つまり、メンバへのポインタの値を出力しようとしています。 operator<<にはメンバへのポインタをとるオーバーロードがないため、代わりに boolに変換します。彼の表現はnullではないので、変換結果は trueで、1と表示されます。

+0

ありがとう! (私はまだC++を学んでいます) – user1311122

関連する問題