2011-07-16 36 views
7

Recibí un error de calificación de la variable miembro 'objectCount'. El compilador también devuelve 'ISO C++ prohíbe la inicialización en clase del miembro estático no const'. Esta es la clase principal:Inicialización en C++ de variable de miembro estático no constante?

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

int main() 
{ 
    Tree oak; 
    Tree elm; 
    Tree pine; 

    cout << "**********\noak: " << oak.getObjectCount()<< endl; 
    cout << "**********\nelm: " << elm.getObjectCount()<< endl; 
    cout << "**********\npine: " << pine.getObjectCount()<< endl; 
} 

Esta es la clase de árbol que contiene el objectCount estática no constante:

#ifndef TREE_H_INCLUDED 
#define TREE_H_INCLUDED 

class Tree 
{ 
    private: 
     static int objectCount; 
    public: 
     Tree() 
     { 
      objectCount++; 
     } 
     int getObjectCount() const 
     { 
      return objectCount; 
     } 
    int Tree::objectCount = 0; 
} 
#endif // TREE_H_INCLUDED 
+0

No hay otra alternativa que no fue mencionado en ninguna de las respuestas sugeridas en al momento de escribir esto, lo que le permite ** mantener ** todo en un ** encabezado simple **. Vea el ejemplo en [esta respuesta SO] (http://stackoverflow.com/a/33618854/3041008), se adapta perfectamente a su ejemplo. – mucaho

Respuesta

14

Usted tiene que definir la variable estática en el archivo de origen que incluye esta cabecera .

#include "Tree.h" 

int Tree::objectCount = 0; // This definition should not be in the header file. 
          // Definition resides in another source file. 
          // In this case it is main.cpp 
+0

Todavía hay el siguiente error 'dos ​​o más tipos de datos en la declaración de objectCount' – kifcaliph

+0

Olvidé poner esta línea int 'Tree :: objectCount = 0;' fuera de la clase y olvidé terminar la clase de encabezado con punto y coma gracias – kifcaliph

+0

¿Por qué esta variable debe declararse fuera de la clase? Estoy tratando de definir e inicializar una variable privada, y estoy obteniendo el mismo error. ¿Cómo hago esto fuera de la clase? – dangerChihuahua007

3

Debe definirlo fuera del alcance en un único archivo C++, no en el encabezado.

int Tree::objectCount = 0; 
int main() 
{ 
    Tree oak; 
    Tree elm; 
    Tree pine; 

    cout << "**********\noak: " << oak.getObjectCount()<< endl; 
    cout << "**********\nelm: " << elm.getObjectCount()<< endl; 
    cout << "**********\npine: " << pine.getObjectCount()<< endl; 
} 

#ifndef TREE_H_INCLUDED 
#define TREE_H_INCLUDED 

class Tree 
{ 
    private: 
     static int objectCount; 
    public: 
     Tree() 
     { 
      objectCount++; 
     } 
     int getObjectCount() const 
     { 
      return objectCount; 
     } 
} 
#endif // TREE_H_INCLUDED 
4
int Tree::objectCount = 0; 

La línea anterior debería estar fuera de la clase, y en .cpp archivo, como se muestra a continuación:

//Tree.cpp 
#include "Tree.h" 

int Tree::objectCount = 0; 
Cuestiones relacionadas