Je souhaite avoir une classe simple représentant un objet avec un identifiant unique. Chaque nouvel objet obtient un identifiant supérieur à celui précédemment créé. Une chose importante à noter est que id pour chaque objet est constant, donc je suis obligé d'utiliser la liste d'initialisation. Pour une raison quelconque, je reçois une erreur à propos de la référence indéfinie: référence indéfinie à Test :: ID.Utilisation d'un membre de classe statique en tant que paramètre dans la liste d'initialisation
class Test
{
const int m_id;
static int ID;
public:
Test() : m_id(ID++)
{
cout << "Created object with id: " << m_id << endl;
}
};
- Pourquoi est-ce?
- Comment puis-je résoudre ce problème?
- Comment puis-je m'assurer que l'ID est pré-initialisé avec 0, donc je n'incrémente pas une variable non initialisée?
Ce n'est pas une bonne idée d'utiliser des variables en majuscules – Slava
Salut, merci pour le conseil ... Mais pourquoi? Est-ce à cause de la manière courante de nommer les consts en utilisant seulement les majuscules ou il y a une autre raison derrière cela? –
Nommer les consts en utilisant des majuscules est anti-pattern qui provient de la création de constantes en utilisant le préprocesseur. La collision de noms avec le préprocesseur est difficile à attraper et difficile à maintenir, donc la création de constantes C++ et de variables en majuscules n'est pas une bonne idée. – Slava