0

次のコードがあります。

class gptr_timer {

private:

  static qtimer_t gptr_get_timer;

public:

  static void create_gptr_get_timer(){
    gptr_get_timer = qtimer_create();
  }

  static void destroy_gptr_get_timer(){
    qtimer_destroy(gptr_get_timer);
  }

  static void start_gptr_get_timer(){
    qtimer_start(gptr_get_timer);
  }

  static void stop_gptr_get_timer(){
    qtimer_stop(gptr_get_timer);
  }

  static double get_gptr_get_time(){
    return qtimer_secs(gptr_get_timer);
  }

};

次のコンパイル エラーが発生します。

/home/knusbau2/barnes/qppl/gptr.h:24: undefined reference to `ppl::gptr_timer::gptr_get_timer'

gptr_get_timer が明確に定義されているため、少し混乱しています。

4

1 に答える 1

6

定義を追加することにより:

class gptr_timer { /* ... */ };       // class definition;
                                      // *delcares* static member variables

qtimer_t gptr_timer::gptr_get_timer;  // *define* static member variables

静的メンバーの定義は 1 つの翻訳単位に入る必要がありますが、クラスの定義は通常ヘッダーにあります。注意してください。

メンバー定義は、クラス定義内で初期化できるいくつかの特殊なケース (つまり、静的定数式) を除いて、初期化の場所でもあります。

于 2013-03-11T19:52:34.477 に答える