加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c没有cpp文件的静态类变量

发布时间:2020-12-16 09:43:57 所属栏目:百科 来源:网络整理
导读:我有一个简单的类来存储传感器数据,可以概括为 class Data{ public: Data(){timestamp = Time::now(); id = sNextID++; data = 0; type = DATA_TYPE_UNKNOWN;} double data; Time timestamp; DataType type; private: static unsigned int sNextID;}; 我有一
我有一个简单的类来存储传感器数据,可以概括为

class Data
{
  public:
  Data(){timestamp = Time::now(); id = sNextID++; data = 0; type = DATA_TYPE_UNKNOWN;}

  double data;
  Time timestamp;
  DataType type;

  private:
  static unsigned int sNextID;
};

我有一个头文件,声明了一堆类似的数据类.鉴于类的简单性,不需要实现cpp文件.

问题是,如果没有实现文件,我该如何初始化sNextID?我在某个地方看到它默认为0这样会好的,虽然依赖它似乎有点hackish.但更重要的是,如果没有在某个地方初始化它,链接器就会抱怨未定义的引用.

解决方法

使用 inline function(独立或会员):

inline unsigned &sNextID()
{
    static unsigned data = 0;
    return data;
}

或类模板(它的静态can be in header file的定义):

template<typename tag>
struct Foo
{
    static unsigned sNextID;
};

template<typename tag>
unsigned Foo<tag>::sNextID=0;

更新:在C 17中可以使用内联变量:

struct Foo
{
    static inline unsigned sNextID;
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读