如何在头文件中初始化类的私有静态成员?
你好!我开始学习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 文件中正确初始化私有静态成员,使代码更紧凑?