为什么静态变量是通过类外静态变量的重新声明来初始化的?我们不能只是初始化它而不是重新声明它吗?

Why is the static variable initialized with redeclaration of static variable outside the class? Can't we just initialize it instead of redeclaring it?

本文关键字:声明 新声明 初始化 静态 变量 不能 我们 为什么      更新时间:2023-10-16
#include <iostream>
using namespace std;
class Box
{
   public:
      static int objectCount;
}
// Initialize static member of class Box
int Box::objectCount = 0;

似乎混淆了变量的声明和定义。

声明只是告诉编译器一个名称。所以在你的情况下:

class Box
{
    public:
        static int objectCount;
};

这只是告诉编译器有一个名为objectCount的变量
但现在你仍然需要一个定义。

int Box::objectCount = 0;

链接器需要简化定义
因此,作为一个简单的规则,静态成员变量必须在类中声明,然后在类外定义