Como inicializar membros estáticos privados de uma classe em um arquivo de cabeçalho?
Olá! Comecei a estudar C++ e me deparei com um problema ao trabalhar com membros estáticos de classe. Tenho uma classe simples que armazena o número de objetos criados:
```cpp
// MyClass.h
class MyClass {
private:
static int counter; // declaração do membro estático
public:
MyClass() { ++counter; }
int getCounter() const { return counter; }
};
```
Estou tentando inicializar `counter` diretamente no arquivo de cabeçalho, por exemplo, assim:
```cpp
static int counter = 0; // erro!
```
Mas o compilador gera um erro: "non-const static data member must be initialized out of line". Se eu tornar o membro público e inicializá-lo em um arquivo .cpp, funciona:
```cpp
// MyClass.cpp
#include "MyClass.h"
int MyClass::counter = 0;
```
Mas não é conveniente criar um arquivo .cpp separado toda vez para coisas tão simples. Ouvi dizer que no C++17 surgiram algumas novas possibilidades. Como inicializar corretamente membros estáticos privados em um arquivo de cabeçalho, para que o código fique compacto?