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!
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. –
@Richard Critten Comment alors suggérez-vous que je structure getRect? – TheCrifix
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 –