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

[C++] Classes : appeler fonction

Virtuality
Virtuality
Niveau 8
17 novembre 2005 à 21:39:02

Salut,

tout d´abord, je précise, je travail avec SDL (en C++ comme mis dans le titre).
Je vous expose mon problème.
J´ai une classe game, dans laquelle se déroule toutes les actions de mon jeu.
J´ai également une classe "SDL" dans la quelles sont définies toutes les fonctions qui me permettent de charger, blitter, afficher du texte dans mon jeu.
Donc le truc auquel j´ai pensé, c´est initialiser cette classe SDL dans le constructeur de ma classe game.
C´est ce que j´ai fait :
SDL * init = new SDL(400,600); //X,Y de la fenetre
Puis j´appelais mes fonctions ainsi dans ma procédure play de game :
XXX=SDL->LoadImage("images/XXX.BMP");
et pour obtenir la screen sur la quelle blitter (définie dans la classe SDL) :
init->Get_Screen();

Bon voila, seul ennui, ça foire complètement... (le prog crash)
J´ai donc pensé que créer un pointeur sur la classe n´est pas une bonne idée, j´ai donc essayé ainsi :
SDL init(400,600);
et :
red_block=SDL.LoadImage("images/blockr.BMP");
et aussi :
init.Get_Screen();

Mais la, le programme crash à ce point, apparemment, il apprécie pas :(

Bon vous allez me dire que je maitrise pas ce que j´utilise... c´est pas tout à fait faux, mais j´ai vraiment besoin d´applications car sans ça je m´en sors pas avec tout ce que j´apprend :-p

Si qqn a une idée de comment résoudre ça, ou si ce n´est pas suffisemment clair, n´hésitez pas à me répondre :)

Merci d´avance :-)

Virtuality
Virtuality
Niveau 8
17 novembre 2005 à 21:45:25

Pardon, 2 réctifications :
c´est pas :
red_block=SDL.LoadImage("images/blockr.BMP");
mais :
red_block=init.LoadImage("images/blockr.BMP");
distraction :p)

et 1 précision:
dans la seconde version, le programme ne compile pas a cause du init.Get_Screen()

il dit :
"error : request for member ´Get_Screen´ in ((game*)this)->game::init´, which is of non-class type ´SDL*´

Je comprend ce que dit lerreur mais je vois pas le problème... ma fonction get screen étant pareil aux précédentes...

godrik
godrik
Niveau 30
17 novembre 2005 à 22:10:56

postes ton code sur le wall et file l´adresse

Virtuality
Virtuality
Niveau 8
17 novembre 2005 à 22:27:14

Here it is : http://rafb.net/paste/results/38hzPF97.html

Voila voila, j´attend toute remarque quand à ma façon d´essayer de coder objet, du moment que c´est pas assassin.
Difficile de trouver de beaux codes sources compréhensibles sur le net :)

Je précise que j´ai mis aucune ligne du jeu, mais seulement de la structure, vu que c´est cette partie qui plante!
Ceci pour une simple question de lisibilité :)

Merci d´avance !

tomtomclancy
tomtomclancy
Niveau 9
17 novembre 2005 à 22:40:28

init m´a l´air d´etre declaré en tant que pointeur, ce qui voudrait dire que pour appeler les fonction membre mette -> au lieu de .

SDL_Surface* game::Get_Screen()
{
return init->Get_Screen();
}

Virtuality
Virtuality
Niveau 8
17 novembre 2005 à 22:49:04

Oui j´ai pensé à ça aussi, mais la le programme crash, et j´ai l´erreur habituelle de sdl :
Fatal signal: Segmentation Fault (SDL Parachute Deployed)

merci :-)
(et bonne nuit :p) )

godrik
godrik
Niveau 30
17 novembre 2005 à 22:53:53

while(1)
{
thegame->play();
}
c´est pas propre ca.
surtout qu´il suit:
delete thegame;
qui ne sera pas executé.

SDL::SDL(int resolx,int resoly)
{
Xresol = resolx;
Yresol = resoly;

ce n´est pas tres homogène avec:
game::game():
fall(false),speed(1)
{

ecris plutot:

SDL::SDL(int resolx,int resoly)
:Xresol(resolx), Yresol(resoly)
{

je vois un :
SDL * init;
et un:
init.vTexte(
return init.Get_Screen();
ce qui n´est pas coherent(ca ne devrait pas compiler)

apres il me manque du code...

jejej
jejej
Niveau 9
17 novembre 2005 à 22:53:55

99 % de mes plantages avec SDL viennent de structures SDL_Surface mal chargees ( et utilisees quand meme :p) ) parceque je me suis trompe dans le nom de l´image ...

verifie que l´image est bien chargee , en testant si le pointeur est egal à NULL ( dans ce cas , y a un probleme ) ( ou alors c 0 peut etre ... ou - 1 ... bref )
genre , tu ecris "image.BMP" , peut etre que c´est juste ´bmp´ et pas ´BMP´ ?

Virtuality
Virtuality
Niveau 8
18 novembre 2005 à 07:11:52

jeje => le prob vient pas de la j´en suis sur :)

godrik => pour le premier point, tu me conseillerais de faire comment? Je n´ai pas vraiment d´idée sur la question.

pour le second point, je suis ok :)

pour le troisième en effet ça compile pas, mais le sdl * init était la pour la première façon, qui ne compilais pas.
Pourquoi ca foire pas avec la fonction loadimg et pas avec vtexte ou get_screen?
c´est la que je comprend pas...
merci :)

godrik
godrik
Niveau 30
18 novembre 2005 à 13:29:23

while(thegame->play());
et ply renvoie false quand le jeu est terminé. par exemple

Virtuality
Virtuality
Niveau 8
18 novembre 2005 à 18:25:53

Merci godrik, j´ai corrigé :)

Sinon pour la 3e chose que tu m´as fait remarquée, je sais toujours pas quoi faire.
Tu dis qu´il faudrait plus de code, mais j´ai seulement vidé la procédure play() pour y mettre les deux lignes qui ne fonctionnent pas, le reste fonctionne et n´est pas important...
En principe le code sur le wall devrait compiler...

Merci pour l´aide :-)

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