Gå til innhold

[Løst]Trenger hjelp med enum kall etc.


Anbefalte innlegg

Hei,

 

Driver å leker litt med SDL og har driver å lager spritebiblotek som skal loade spritene:

#include "./Graphics/MovingSprites.h"

class SpriteLib
{
public:
enum GfxSlot {
	GFX_MARIO
};

SDL_Surface *Gfx(GfxSlot gfx);

void LoadSprite();

protected:
SDL_Surface *surfaces[256];
};

Når jeg i klassen MovingSprite.cpp, da skal ha tak i en sprite, så gjør jeg følgende:

//Drawing Mario to the surface
this->img = SpriteLib::Gfx(SpriteLib::GFX_MARIO);

//Setting start position
this->rect.x = 0;
this->rect.y = 0;

 

Da får jeg feilmeldingen "Illegal call of a non-static member function".

 

Håper noen kan hjelpe meg. Føler meg litt ute å kjører nå...

Lenke til kommentar
Videoannonse
Annonse

Har funnet ut av det jeg lurte på.

 

Laget en static public funksjon i SpriteLib som dette:

static SpriteLib *spritelib::GetInstance(){
Spritelib spritelib = NULL;

if(spritelib==NULL){
spritelib = new Spritelib();
}
return spritelib;
}

 

Så kalte jeg bare da dette slik i den klassen det skal vbrukes:

SpriteLib s = Spritelib::GetInstance();
s->draw(s->GFX_MARIO);

 

Med denne metoden, så slapp jeg da å sette alt det andre i SpriteLib klassen til static, altså, jeg slapp å bruke SpriteLib:: foran alle de statice funksjonene og det jeg sklulle kalle opp...

 

Da setter jeg tråden min til løst ;)

 

(Måtte ta dette fra hodet, så kan være enkelte feil her, men hoveddelen er riktig)

Lenke til kommentar

Problemet i det første eksempelet er at du kaller funksjonen Gfx som om den var en statisk funksjon. Det blir det faenskap ut av. Hvis du skulle brukt den opprinnelige koden din i MovingSprite.cpp måtte du først ha laget en instanse av SpriteLib for så å kalle Gfx på denne instansen.

 

Den singleton approachen som du bruker nå, bør du tenke nøye gjennom. Er det logisk at det til en hver tid bare finnes én instans av SpriteLib klassen? Hvis dette er tilfellet, bør du gjøre konstruktørene til SpriteLib protected eller private for å forsikre deg om at det virkelig bare er én instans av klassen. Forresten, hvis du ser en tendens til mange singleton-klasser, bør du være litt obs, for det er ofte et tegn på dårlig design.

 

:)

Lenke til kommentar
Problemet i det første eksempelet er at du kaller funksjonen Gfx som om den var en statisk funksjon. Det blir det faenskap ut av. Hvis du skulle brukt den opprinnelige koden din i MovingSprite.cpp måtte du først ha laget en instanse av SpriteLib for så å kalle Gfx på denne instansen.

 

Den singleton approachen som du bruker nå, bør du tenke nøye gjennom. Er det logisk at det til en hver tid bare finnes én instans av SpriteLib klassen? Hvis dette er tilfellet, bør du gjøre konstruktørene til SpriteLib protected eller private for å forsikre deg om at det virkelig bare er én instans av klassen. Forresten, hvis du ser en tendens til mange singleton-klasser, bør du være litt obs, for det er ofte et tegn på dårlig design.

 

:)

 

Okei, takk for den forklaringen. Noe av det hadde jeg ikke tenkt på, men foreløpig så tror jeg nok ikke det blir noe problem.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...