2017-03-28 4 views
0

J'essaye de faire un er simple conteneur pour le texte dans SDL par l'intermédiaire des classes. La classe est supposée contenir un pointeur vers une SDL_Texture et une SDL_Rect ainsi que des méthodes pour obtenir les informations des instances de la classe. Mon problème se pose lorsque je tente de blit la texture à l'écran avec la fonction suivante:Prendre l'adresse de SDL_Rect temporaire

//Assume that renderer is already created 
SDL_RenderCopy(renderer, texture.getTexture(), NULL, &texture.getRect()); 

Le compilateur apporte mon attention sur le quatrième paramètre et énonce ce qui suit:

error: taking address of temporary [-fpermissive] 

Le code pour mon classe est:

//Class 
class Texture 
{ 
    private: 
     SDL_Texture* texture; 
     SDL_Rect  rect; 
    public: 
     Texture(){/*Don't call any of the functions when initialized like this*/} 
     Texture(SDL_Texture* texure) 
     { 
      this->texture = texture; 
     } 
     SDL_Texture* getTexture() 
     { 
      return texture; 
     } 
     SDL_Rect getRect() 
     { 
      return rect; 
     } 
     void setRect(int posX, int posY, int scale, SDL_Texture* texture) 
     { 
      int textW = 0; 
      int textH = 0; 
      SDL_QueryTexture(texture, NULL, NULL, &textW, &textH); 
      this->rect = {posX,posY,textW*scale, textH*scale}; 
     } 
}; 

Le code pour mon programme principal est:

//Main Program 
TTF_Font* font = TTF_OpenFont("./PKMNRSEU.FON", 17); 
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); 

Texture texture(renderText(font, "Hello", white, renderer)); 
texture.setRect(100, 100, 5, texture.getTexture()); 

bool running = true; 

Uint32 startingTick; 
SDL_Event event; 

while (running) 
{ 
    startingTick = SDL_GetTicks(); 
    while (SDL_PollEvent(&event)) 
    { 
     if (event.type == SDL_QUIT) 
     { 
      running = false; 
      break; 
     } 
    } 

    SDL_RenderCopy(renderer, texture.getTexture(), NULL, &texture.getRect()); 
    SDL_RenderPresent(renderer); 

    clockTick(startingTick); 
} 
SDL_DestroyRenderer(renderer); 

TTF_CloseFont(font); 

J'ai aussi essayé instanciation mon objet comme celui-ci:

Texture* texture = new Texture(renderText(font, "Hello", white, renderer)); 

mais je reçois toujours la même erreur. Je soupçonne que cela a à voir avec le SDL_Rect n'étant pas un pointeur.

Merci d'avance!

+0

Il est à voir avec 'texture.getRect () 'renvoyer un' SDL_Rect 'temporaire. Comme le dernier paramètre est la destination, il va jeter le résultat car il mettra à jour le temporaire. –

+0

@Richard Critten Comment alors suggérez-vous que je structure getRect? – TheCrifix

+1

Vous êtes dans wayyyy trop profond. Faites quelque chose de simple en premier: 'int f(); int g (int *); int main() {g (&f());} 'Comprendre ce code et pourquoi cela ne fonctionne pas –

Répondre

0

Une solution simple pourrait être de changer la signature/mise en œuvre de getRect comme suit:

SDL_Rect *getRect() 
    { 
     return ▭ 
    } 

Ensuite, vous pouvez appeler SDL_RenderCopy comme ceci:

SDL_RenderCopy(renderer, texture.getTexture(), NULL, texture.getRect()); 
+0

Ou renvoyez une référence 'const'. – genpfault