c++ - 未定义的静态类变量

标签 c++ class static undefined

我有以下代码:

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。

最佳答案

通过添加定义:

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

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

静态成员定义必须进入一个单独的翻译单元,而类定义通常在标题中。当心。

成员定义也是初始化的地方,除了一些可以在类定义中初始化的特殊情况(即静态常量表达式)。

关于c++ - 未定义的静态类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347326/

相关文章:

c++ - 数组上的 const 值是否与数组上的 const 不同

c++ - 点同时共线和不共线

c++ - 基于文本的冒险游戏

c - 将外部变量重新定义为静态时没有错误

c++ - 在比较函数中使用非静态类成员

c++ - 关于C++运算符优先级的问题

c++ - 为什么标准库min函数在下面显示错误?

class - 为什么我可以将方法标记为隐式而不是构造函数?

php - 如何连接同一个类中的两个不同的MySQL DB

c++ - 如何在不传递类实例的情况下从静态成员函数调用非静态成员函数