Duda de constructores en c++

gonya707

Buenas gente, tengo un juego entre manos y he creado una clase Gun. Esta resumido, el contenido es lo de menos

class Gun {
	private:
		int currentGun;
	public:
		Gun(void); 
		void nextGun(void);
		void previousGun(void);
		int getCurrentGun(){return currentGun;}
};

Mas abajo tengo definidos tambien lo que hacen los metodos que quedan, es lo de menos. Ahora me voy al main y para crearme un objeto tipo Gun, simplemente he visto que se escribe el constructor:

Gun g; //no se pone nada mas porque el contructor es Gun(void); 

Parece no dar problemas al compilar, peeero al ejecutar la ventana ni aparece. Una cosa que necesito es declarar este objeto global, y entonces lo pongo junto a todas las variables globales (antes del main), y entonces es cuando peta, porque si lo declaro dentro del main no pasa nada raro, pero entonces ya no puedo acceder al objeto dentro de otras funciones, y realmente es necesario.

Alguien que me sepa arrojar luz sobre el asunto? :( tambien he visto que existe "new" como en java, pero si se llaman a los contrtuctores como arriba no se como se usa.

cabron

¿Qué error te da?, en principio no hay ningún problema con lo que intentas hacer:

#include <iostream>

using namespace std;

class foo
{
public:
	int bar;
};

foo f;

int main(int argc, char* argv[])
{
	f.bar = 4;
	
return f.bar;
}

The program has exited with code 4 (0x4).

new solo lo necesitas si quieres crear el objeto en el montón y acceder a él mediante un puntero, por lo demás es igual que crearlo cmo lo has hecho, solo cambia el sitio de la memoria donde se crea el objeto y como se accede a él, no lo necesitas para crear un objeto si no quieres.

1 respuesta
gonya707

#2 El problema es precisamente que no arroja ningun error, si creo el objeto dentro del main funciona normal, pero si lo hago fuera para que sea global entonces ejecuto y no pasa nada, no se abre la ventana.

cabron

Tienes que tener algún error en la lógica del programa, no es problema de estar usando mal un constructor por que se usan como lo estás haciendo.

G

Usar variables globales es una práctica muy mala, que por lo que pones en tu comentario no solo tienes una, si no que tienes varias variables globales. Así que acaba con eso. Si necesitas un objeto o cualquier variable en otra función se lo pasas como un parámetro pero nada de hacer variables globales.

El new se usa cuando vas a trabajar con memoria dinámica.

Has puesto que eso es un resumen, por lo que te pregunto ¿has hecho la forma canónica? Por lo que veo en esta clase parece que no haría falta pero yo te recomendaría que la hagas, para ir acostumbrándote no solo a que las cosas funcionen si no a que estén bien hechas.

Usuarios habituales