我是 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/

10-11 02:52
查看更多