PDA

Ver la versión completa : [Ayuda] Atascado con los static...



Puck2099
06/04/2009, 17:59
Hola,

No sé si será el sueño o qué me pasa, pero llevo un buen rato "atascado" con los static, sé que alguna tontería se me está pasando, pero ahora no lo veo, así que os cuento a ver si alguien me echa una mano...

Quiero tener una clase que sirva como repositorio de imágenes, para cargarlas todas allí en un momento dado y luego ya acceder a ellas cuando las necesite.

Para esto quiero tener un miembro estático por cada imagen y una función estática en la clase para cargarlas todas.

Mi código es el siguiente:

Fichero de cabecera:



#ifndef IMGS_H
#define IMGS_H

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>

class Imgs
{
public:
Imgs();
virtual ~Imgs();
static void loadImgs();
static SDL_Surface * gr_elvis;
protected:
private:

};

#endif // IMGS_H


Fichero de "código":

#include "imgs.h"

Imgs::Imgs()
{
//ctor
}

Imgs::~Imgs()
{
//dtor
}

void Imgs::loadImgs()
{
SDL_Surface * tmp;

tmp = SDL_LoadBMP ("gr_elvis.bmp");
gr_elvis = SDL_DisplayFormat (tmp);
SDL_FreeSurface (tmp);
SDL_SetColorKey (gr_elvis, SDL_SRCCOLORKEY, SDL_MapRGB (gr_elvis->format, 248, 64, 248) );
}

El error que me da es:
undefined reference to `Imgs::gr_elvis'

¿Alguna idea?

Muchas gracias :brindis:

DarkDijkstra
06/04/2009, 18:48
Creo recordar que los atributos estáticos de una clase tenías que declarar de una manera un poco "especialita"...

Prueba a poner en tu imgs.cpp, tras el include lo siguiente:

SDL_Surface * Imgs::gr_elvis = 0;

swapd0
06/04/2009, 23:32
En mi opinion quedaria mejor si usases el patron singleton.

Siempre que declares algo estatico debes definirlo despues.

Asi que en el cpp, tendas que poner algo como:
tipo clase::variableEstatica; // mejor si se inicializa a algun valor concreto

Puck2099
07/04/2009, 10:18
Vale, efectivamente tenía que volver a declarar/definir los atributos como decís, ahora ya funciona.

Muchas gracias :brindis: