c++ - 为什么我不能在类中为静态变量设置值?

标签 c++ class object methods static

我是 C++ 的新手,正在尝试使用类和静态变量。

我已经找到了使代码运行的解决方案,但我不确定为什么这有效以及为什么我以前的方法不起作用

#include <iostream>

using namespace std;

class Person {
    static int id;
public:

    void createPerson() {
        id++;
        cout << id << endl;
    }

};

int Person::id = 0;


int main() {

    Person Person1;
    Person Person2;

    Person1.createPerson();
    Person2.createPerson();

}

我想知道为什么我必须在类外声明 id 的值。以及为什么我不能有类似的东西..

class Person {
    static int id = 0;
public:

    void createPerson() {
        id++;
        cout << id << endl;
    }

};

最佳答案

static 数据成员不是对象的一部分,因此您需要通过提供该定义来明确告诉编译器将它们存储在哪个翻译单元中。

请注意,类模板的静态数据成员可以在头文件中定义。

在 C++17 中,static 数据成员可以声明为 inline,因此不需要外联定义。

关于c++ - 为什么我不能在类中为静态变量设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57803204/

相关文章:

c++ - 为什么STL<set>的重载运算符<function必须是const函数?

swift - 子类 UICollectionViewCell 的属性

c++ - 如何在 C++ 中初始化类中的私有(private)变量?

c# - 是否可以在 C# 中创建没有类的对象?

java - 从另一个列表更新列表中的对象

c++ - 如何使用 fmt 库格式化带十进制逗号的 float ?

c++ - 如何使用Qt获取数据库大小?

java - LinkedList(通用)中的删除方法有什么问题?

javascript - 如何在没有 css 的情况下检查鼠标是否在屏幕上的 "invisible"框内(JavaScript 和 jQuery)

c++ - 将 long 复制到 unsigned char 数组的后半部分