Avatar ·

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?