Avatar ·

如何在头文件中初始化类的私有静态成员?

你好!我开始学习C++,在处理类的静态成员时遇到了问题。我有一个简单的类,用于存储创建的对象数量: ```cpp // MyClass.h class MyClass { private: static int counter; // 静态成员的声明 public: MyClass() { ++counter; } int getCounter() const { return counter; } }; ``` 我尝试直接在头文件中初始化 `counter`,例如: ```cpp static int counter = 0; // 错误! ``` 但编译器报错:"non-const static data member must be initialized out of line"。如果我将成员设为 public 并在 .cpp 文件中初始化,一切正常: ```cpp // MyClass.cpp #include "MyClass.h" int MyClass::counter = 0; ``` 但我不习惯为这么简单的事情每次都创建单独的 .cpp 文件。我听说 C++17 引入了一些新特性。如何在 header 文件中正确初始化私有静态成员,使代码更紧凑?