Foros del Web » Programación para mayores de 30 ;) » Programación General »

Se puede hacer con static??

Estas en el tema de Se puede hacer con static?? en el foro de Programación General en Foros del Web. Hola, veamos.. os cuento. Tengo una clase error y en ella quiero generar todos los errores de mi aplicación. La cuestión es que al contructor ...
  #1 (permalink)  
Antiguo 26/07/2005, 02:32
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
Se puede hacer con static??

Hola, veamos.. os cuento. Tengo una clase error y en ella quiero generar todos los errores de mi aplicación. La cuestión es que al contructor le paso un codigo con el error (tipo int). Lo que quiero es tener unas constantes para poder llamar al constructor como new Error(FALLA_USUARIO), en lugar de new Error(1). Yo he creado estas constantes en la clase error como static int FALLA_USUARIO = 1, pero no me deja acceder a esats constantes desde otras clases...
¿Alguien me podría ayudare en esto?
  #2 (permalink)  
Antiguo 26/07/2005, 04:00
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Si lo declaras dentro del ambito de la clase solo sera visible para ella y sus descendientes. Tenes que declarlo fuera de la clase, podes usar una constante:
const int FALLA_USUARIO = 1;
o una macro que se reemplaza en el codigo por el preprocesador:
#define FALLA_USUARIO 1

En tu caso el static lo que hace es que todas las instancias de la clase error (sus objetos) sean capaces de acceder al miembro FALLA_USUARIO (es compartido) tanto para leer como para modificar su valor.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 26/07/2005, 04:13
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
Fuera de la clase, no me deja porque me dice que un namespace no puede tener variables (un error similar). Si lo hago como define no puedo acceder desde cualquier clase de la aplicacion. al final lo he puesto como static public int ERROR = 9; y asi puedo acceder desde cualquier clase de la aplicacion mediante Error.ERROR.... el problema es que desde cualquier clase me pueden modificar el valor y esto es lo que quiero evitar....

Gracias por tu información
  #4 (permalink)  
Antiguo 26/07/2005, 04:45
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
¿Estamos hablando de C++, verdad? Porque de ser asi es factible declarar variables en un namespace particular ...

Con una macro de #define tambien te funcionaria perfectamente.

Código:
#include <stdio.h>

namespace erroneo
{
  //#define FALLA_USUARIO 1
  const int FALLA_USUARIO = 1;	
  class error
  {
    public:
    error(int errorNumber)
    {
      printf("error numero %d\r\n", errorNumber);
    } 
  };
  class intento
  {
    public:
      intento()
      {
        error *fallo = new error(FALLA_USUARIO);
      }
  };
}

using namespace erroneo;

void main()
{
  error *s = new error(FALLA_USUARIO);
}
Lo logico seria incluir estas constantes en un archivo .H e incluirlo desde todos los modulos que quieran utilizarlo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 26/07/2005, 05:06
 
Fecha de Ingreso: abril-2005
Mensajes: 195
Antigüedad: 19 años
Puntos: 0
En realidad yo estoy trabajando con C# y se trata de una aplicación web. Quiza por eso a mi no funciona. Disculpa la confusion
  #6 (permalink)  
Antiguo 26/07/2005, 05:35
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Deberias haber empezado especificando el lenguaje, ya que hay un foro de .NET asumi que hablabas de C++.

Código:
using System;

class error
{
  public const int FALLA_USUARIO = 1;
  public error(int x)
  {
    Console.Write(Convert.ToByte(x));
  }
};

class entry
{
  static void Main()
  {
    error crash;
    crash = new error(error.FALLA_USUARIO);
  }
}
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:40.