erreur: ISO C++ forbids initialisation dans les classes de non-const membre statique

c'est le fichier d'en-tête: l'employé.h

#ifndef EMPLOYEE_H
#define EMPLOYEE_H

#include <iostream>
#include <string>
using namespace std;

class Employee {
public:
    Employee(const string &first, const string &last) 

Surchargé Constructeur

    : firstName(first), 

prénom surchargé constructeur

      lastName(last) 

lastName surchargé constructeur

    { //The constructor start
    ++counter; 

il ajoute un plus pour chaque objet créé;

    cout << "Employee constructor for " << firstName
         << ' ' << lastName << " called." << endl;
    }

    ~Employee() { 

Destructeur
cout << "~Employé() a appelé à une " << prenom <<"'
<< nom << endl;

Retourne le prénom et le nom de chaque objet

        --counter; 

Contre moins un

    }

    string getFirstName() const {
        return firstName; 
    }

    string getLastName() const {
        return lastName;
    }

    static int getCount() {
        return counter;
    }
private:
    string firstName;
    string lastName;

   static int counter = 0; 

C'est là que j'ai obtenu l'erreur. Mais, pourquoi?

};

principale du programme: employee2.cpp

#include <iostream>
#include "employee2.h"
using namespace std;

int main()
{
    cout << "Number of employees before instantiation of any objects is "
         << Employee::getCount() << endl; 

Ici ir appel te valeur du compteur de la classe

    { 

Commencer un nouveau champ d'application bloc

        Employee e1("Susan", "Bkaer"); 

Initialiser le e1 objet de classe Employé

        Employee e2("Robert", "Jones"); 

Initialiser le e2 objet de classe Employé

        cout << "Number of employees after objects are instantiated is"
             << Employee::getCount(); 

        cout << "\n\nEmployee 1: " << e1.getFirstName() << " " << e1.getLastName()
             << "\nEmployee 2: " << e2.getFirstName() << " " << e2.getLastName()
             << "\n\n";
    } 

fin de l'étendue du bloc

    cout << "\nNUmber of employees after objects are deleted is "
         << Employee::getCount() << endl; //shows the counter's value
} //End of Main

Quel est le problème?
Je n'ai aucune idée de ce qui est mauvais.
J'ai beaucoup réfléchi, mais je ne sais pas ce qui est mal.

Je ne pense pas que c'est ce qu'il veut, puisque le compteur est en train d'être modifié ultérieurement.
Oui, vous avez raison!
Je veux initialiser contre et, plus tard, l'incrémenter avec le constructeur. Puis décrémenter avec le destructeur.
Je ne pense pas que le message d'erreur peut être plus clair.
Le message d'erreur ne vous raconte pas ce qui est mauvais, pas comment résoudre le problème.

OriginalL'auteur mishelashala | 2013-12-01