142 votes

Comment initialiser une variable membre constante dans une classe ?

#include <iostream>

using namespace std;
class T1
{
  const int t = 100;
  public:

  T1()
  {

    cout << "T1 constructor: " << t << endl;
  }
};

Lorsque j'essaie d'initialiser la variable membre constante t avec 100. Mais cela me donne l'erreur suivante :

test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static

Comment puis-je initialiser un const valeur ?

149voto

Dinkar Thakur Points 780

Le site const variable spécifie si une variable est modifiable ou non. La valeur constante assignée sera utilisée chaque fois que la variable sera référencée. La valeur assignée ne peut pas être modifiée pendant l'exécution du programme.

Bjarne Stroustrup's explication résume brièvement la situation :

Une classe est généralement déclarée dans un fichier d'en-tête et un fichier d'en-tête est généralement inclus dans de nombreuses unités de traduction. Cependant, pour éviter les règles compliquées des linkers, le C++ exige que chaque objet ait une définition unique. Cette règle serait rompue si le C++ permettait la définition en classe d'entités devant être stockées en mémoire en tant qu'objets.

A const doit être déclarée dans la classe, mais elle ne peut pas être définie dans celle-ci. Nous devons définir la variable const en dehors de la classe.

T1() : t( 100 ){}

Voici la mission t = 100 se produit dans la liste des initialisateurs, bien avant l'initialisation de la classe.

63voto

Fred Larson Points 27404

Eh bien, vous pourriez le faire static :

static const int t = 100;

ou vous pouvez utiliser un initialisateur de membre :

T1() : t(100)
{
    // Other constructor stuff here
}

42voto

ravs2627 Points 11

Il y a deux façons d'initialiser les membres const à l'intérieur de la classe

Définition de membre const en général, a besoin d'initialisation de la variable aussi .

1) A l'intérieur de la classe, si vous voulez initialiser la constante, la syntaxe est la suivante

static const int a = 10; //at declaration

2) La deuxième voie peut être

class A
{
  static const int a; //declaration
};

const int A::a = 10; //defining the static member outside the class

3) Si vous ne voulez pas initialiser à la déclaration, alors l'autre moyen est de passer par le constructeur, la variable doit être initialisée dans la liste d'initialisation (pas dans le corps du constructeur). Cela doit être comme ceci

class A
{
  const int b;
  A(int c) : b(c) {} //const member initialized in initialization list
};

21voto

GANESH B K Points 321

Si vous ne voulez pas faire le const dans la classe static, vous pouvez initialiser le const en utilisant le constructeur de la classe. Par exemple :

class Example{
      const int x;
    public:
      Example(int n);
};

Example::Example(int n):x(n){
}

s'il y a plusieurs const Les membres de données dans la classe, vous pouvez utiliser la syntaxe suivante pour initialiser les membres :

Example::Example(int n, int z):x(n),someOtherConstVariable(z){}

14voto

borisbn Points 2301
  1. Vous pouvez mettre à niveau votre compilateur pour qu'il prenne en charge C++11 et votre code fonctionnera parfaitement.

  2. Utiliser la liste d'initialisation dans le constructeur.

    T1() : t( 100 )
    {
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X