Pourquoi ce code ne se compile-t-il pas?
class MyClass { const int size = 5; int arr[size]; };
L'erreur indique que size
est un identifiant non déclaré.
3 Réponses :
C'est parce que size
n'est pas statique, et que vous essayez d'accéder à cette constante "statiquement" (sans objet, c'est-à-dire).
Que signifie accéder statiquement à une constante?
cela signifie que vous essayez d'accéder à un membre sans instance d'objet de cette classe.
sans instance d'objet, il n'y a pas non plus de arr
Un initialiseur membre par défaut (le Et donc, vous ne pouvez pas utiliser Si vous avez l'intention de chaque = 5; code> dans votre code) Spécifie uniquement la manière dont l'élément de données non statique est initialisé par défaut em>. Un constructeur pourrait em> lui donner une valeur différente. En tant que tel, le compilateur ne peut pas savoir em> quelle sa valeur sera à l'heure de la compilation. P>
a :: Taille Code> dans une expression constante de la compilation. Comme lorsque vous déclarez la taille d'une array. P>
a code> d'avoir une taille code> de 5, la variable doit être un membre
consexpr statique code>. Ou comme suggéré dans un commentaire, un
std :: Array <..., 5> code>. P>
Vous avez besoin d'une expression constante pour la taille lorsque vous déclarez un tableau.
Rendre la taille statique
résoudrait votre problème
template <std::size_t N> class MyClass { std::array<int, N> arr; };
En général, vous préférez plutôt std :: array
car la taille est fixe. Vous pouvez éventuellement inclure la taille comme paramètre de modèle.
class MyClass { const static int size = 5; int arr[size]; };
Mieux:
class MyClass {std :: array arr; };