CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Allocation de mémoir : SDL_Surface *

Virtuality
Virtuality
Niveau 8
25 mars 2006 à 20:38:43

Hello,

j´ai un ptit soucis, le voila :

J´ai cette ligne de code :
int NumOfBg = 10;
SDL_Surface *background = new SDL_Surface [NumOfBg];

ibg=0;
background[iBg]=init->LoadImage(fileToLoad);
ibg++;

Bref, c´est de l´hyper simplifié mais je veux juste vous montrer l´idée.
Mon problème se situe au chargement de l´image.
En effet il fonctionne normalement sauf dans ce cas précis.
Le problème doit venir de l´allocation, mais je ne vois pas comment le résoudre.

Le message d´erreur :
"no match for ´operator=´ in ´*(((..."

Je me suis dit, c´est normal, il faut que j´écrive :
SDL_Surface *background = new SDL_Surface *[NumOfBg];

Mais en fait non, j´obtient :
"cannot convert ´SDL_Surface**´ to ´SDL_Surface*´ in assignement

Voila, si qqn a une idée, je l´en remercie d´avance :)
++

Lapintade
Lapintade
Niveau 30
25 mars 2006 à 21:43:22

Faut plus allouer chaque element de ton tableau un par un.

SDL_Surface *background[NumOfBg]; // Tableau de po
inteurs

for (i=0; i<NumOfBg; i++)
background[i]=new SDL_Surface;

Virtuality
Virtuality
Niveau 8
25 mars 2006 à 23:16:33

Ouais mais le prob, c´est que ma variable background est déclarée dans ma classe game, et selon les paramètres (variables durant le jeu), je dois définir une certaine taille pour mon tableau de surface.
Or, NumOfBg dépend de ces paramètres...
Tu vois ce que je veux dire?

Disons que ça marcherais ainsi, mais c´est pas aussi "optimale" que je l´aurais désiré :)
Merci

dnob700
dnob700
Niveau 10
26 mars 2006 à 03:19:01

le problème vient du "niveau d´indirection" comme dirait VC++ : dans l´expression
SDL_Surface *background = new SDL_Surface *[NumOfBg];

le mêmbre de gauche est un SDL_Surface*, alors que celui de droite est un SDL_Surface**. Si tu veux juste un tableau simple (mais un tableau de pointeur quand même), fait ceci :
SDL_Surface **background = new SDL_Surface*[NumOfBg];

quoi que je ne suis pas sûr de la place du caractère ´*´ à droite (il faut peut-être faire *SDL_Surface[NumOfBg])

Et ensuite, il faut effectivement initiliser chaque surface du tableau (dans une boucle par exemple) comme tu l´a fait remarquer Lapintade.

P.S. dans mon post j´ai supposé que pour utiliser des SDL_Surface, on utilisait tout le temps des pointeurs vers ces surface, mais si je me trompe, il faut enlever une étoile partout.

Virtuality
Virtuality
Niveau 8
26 mars 2006 à 12:00:31

Merci dnob, ça marche (avec les ** et *).
J´en profite pour poser une autre question.
J´ai une boucle, dans laquelle je fais :
type_pos ObjectsInFront[StructSize];
type_pos étant une structure.
Le prob est que je dois retourner ce tableau de structure de cette fonction dans ma fonction main.
Seul ennui, lors du return, à la fin de ma fonction, ObjectsInFront n´existe plus, et c´est très grave lol...
Car il doit garder sa valeur à chaque tour de boucle et doit aussi la conserver en dehors?
Question toute bête mais j´ai aucun bouquin de c++ sous la main et je trouve rien sur google :s
merci d´avance

Virtuality
Virtuality
Niveau 8
26 mars 2006 à 12:55:26

J´ai résolu mon problème pour finir :-p
Plus d´erreurs de compilation, merci :)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware