[c/c++] 静态成员函数里访问静态成员变量出现 “undefined reference to ”

正文:

我们知道,静态成员变量和静态成员函数都是独立于类的实例存在的,即便类实例不存在,静态成员变量和函数都是可以独立访问的。这是因为其内存特殊性而导致的。

然而有些时候会把函数的实现写在h文件里,这个时候在使用static成员变量和函数的时候就需要注意,h文件会被编译器认为是声明,因此如果在类中写 static int i;,则编译器会认为这是声明而不是定义,因此 i 实际上并不存在于内存中,这个时候如果在 h 文件的 静态成员函数中访问 i 则会报错 undefined reference to 。 

解决方法有两种:

1)在类声明之外定义这个 static 成员变量,但是定义必须要在cpp文件中做;

A.h
class A
{

static int i;
static void func()
{
  i++;
}

}

A.cpp
static int A::i;

2)在静态成员函数里面直接定义和使用 static 成员变量。

A.hpp

class A
{

static void func()
{
    static int i;
    i++;
}

}

参考:

undefined reference to static private me - C++ Forum

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值