Comment initialiser les membres statiques privés d'une classe dans un fichier d'en-tête ?
Bonjour ! J'ai commencé à apprendre le C++ et j'ai rencontré un problème avec les membres statiques d'une classe. J'ai une classe simple qui stocke le nombre d'objets créés :
```cpp
// MyClass.h
class MyClass {
private:
static int counter; // déclaration du membre statique
public:
MyClass() { ++counter; }
int getCounter() const { return counter; }
};
```
J'essaie d'initialiser `counter` directement dans le fichier d'en-tête, par exemple :
```cpp
static int counter = 0; // erreur !
```
Mais le compilateur génère une erreur : "non-const static data member must be initialized out of line". Si je rends le membre public et que je l'initialise dans un fichier .cpp, tout fonctionne :
```cpp
// MyClass.cpp
#include "MyClass.h"
int MyClass::counter = 0;
```
Mais je trouve gênant de devoir créer un fichier .cpp séparé pour des choses aussi simples. J'ai entendu dire qu'avec C++17, de nouvelles fonctionnalités sont apparues. Comment initialiser correctement les membres statiques privés dans un fichier header pour que le code reste compact ?