Ver Mensaje Individual
  #12 (permalink)  
Antiguo 23/03/2010, 09:54
CalgaryCorpus
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: error en codigo

Cita:
Iniciado por rimobio Ver Mensaje
Esta claro que si nos declaramos una contante dentro de la clase no puede ser inicializada.
No es cierto. Si puede ser inicializada.
Desconozco por qué insistes en decir que una constante no puede ser inicializada.
La forma de hacerlo es asi:

Código C++:
Ver original
  1. class C
  2. {
  3.     const int i;
  4.  
  5.     C() : i(10)     // <-- antes de las llaves,
  6.                     //     momento correcto para inicializar constantes
  7.     {
  8.     }
  9. };

Estas, claramente, confundiendo la inicializacion con la asignacion.
El codigo alternativo:

Código C++:
Ver original
  1. class C
  2. {
  3.     const int i;
  4.  
  5.     C()
  6.     {
  7.          i = 10;
  8.     }
  9. };

No es una inicializacion. Es una asignacion, y ya sabemos que no puedes asignar constantes, pues son .... constantes.

Pero el error de compilacion daria incluso si no hubiera un const ahi.
En C++ no se puede inicializar miembros al definirlos.

Si quitamos el const, e intentamos inicializar el miembro i, como se ve abajo

Código C++:
Ver original
  1. class C
  2. {
  3.     int i = 10;
  4.  
  5.     C()
  6.     {
  7.     }
  8. };

el compilador tiene la obligacion de reclamar, porque no esta permitido, en el lenguaje C o C++ inicializar miembros alli junto a la definicion. El hecho que, ademas, haya sido marcada como const, solo hace mas dificil la inicializacion, pero no tiene que ver con el fondo del asunto, es decir que los miembros no se pueden inicializar al definirlos y éste es el mensaje que aparecio al compilar y que es el origen de este thread.