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++ SDL] Question sur les fonctions

Musashi001
Musashi001
Niveau 10
21 août 2005 à 00:48:05

Bonjour à tous.

Je me demandais s´il y avait moyen de faire nos propre fonctions pour déclarer des variables ou des pointeurs.

Je m´explique, j´ai essayé de faire plusieurs fonctions qui ont pour but de déclarer des variables et/ou des pointeurs vers des objets SDL ou fmod par exemple.

Voila quelques exemple de fonctions dans le style:
http://walljv.free.fr/index.php?to=view&id=102

M´enfin apparament quand ça veut pas, ça veut pas, donc ces fonctions ne remplissent pas correctement leur rôle.

J´aimerai quand même bien faire un truc dans le genre, quelqun à une idée?

TATOFOREVER
TATOFOREVER
Niveau 8
21 août 2005 à 07:34:40

d´apres qu´est-ce que je vois dans ton code source,
ton problemme doit vennir de ta fonction:
3 {
4 name = SDL_LoadBMP(directory); <===<<
5 }

car tu ne peux pas affecter directement un tableau(arrays) a une variable, question de dimentions... car tu ne peux pas metre plusieurs rangées dans une seule.... il te faudra utilisser la fonction "strcpy( chaine2, chaine1);" ou chaine1 est copie sur chaine2....
si ton programme compile, c´est une erreur de loguique ;) . S´il compile pas c´est une erreur de syntaxe. Essae de chercher des doc sur les tableux(arrays) et les fonctions pour manipules les chaines de caracteres.
si ca fait pas ton affaire, met une partie de ton programme principale, je becoin de voir un peu plus to code pour te repondre plus correctement.. :)...

techslash
techslash
Niveau 8
21 août 2005 à 07:34:47

Je comprends mal pourquoi tu veux faire une fonction qui lance une fonction (c´est mauvais pour les performances, c´est mauvais pour la taille du exe et ça correspond simplement à lancer cette fonction sans se compliquer la vie)...

Quoiqu´il en soit:
http://casteyde.christian.free.fr/online/cours_cpp/x600.html

http://perso.numericable.fr/~fvirtman/info/tuto/1_08_func.cpp

techslash
techslash
Niveau 8
21 août 2005 à 07:40:18

Bin c´est pas moi l´expert mais...

name = SDL_LoadBMP(directory);

Me semble exact... SDL_LoadBMP retourne un SDL_Surface * (ce qui est le type de `name`) et demande un const char * en paramètre (ce qui est correspondant à l´utilisation qui est faite de `directory` ici)...

techslash
techslash
Niveau 8
21 août 2005 à 07:42:03

En fait, le problème que je vois avec

SDL_Surface LoadSprite(SDL_Surface *name, char directory[20])
{
name = SDL_LoadBMP(directory);
}

C´est que cette fonction DEVRAIT retourner une SDL_Surface et qu´elle ne le fait pas

void LoadSprite(SDL_Surface *name, char directory[20])
{
name = SDL_LoadBMP(directory);
}

serait p-e plus approprié ?

godrik
godrik
Niveau 30
21 août 2005 à 14:11:05

1 //Charge un sprite (avec SDL)
2 SDL_Surface LoadSprite(SDL_Surface *name, char directory[20])
3 {
4 name = SDL_LoadBMP(directory);
5 }

L´erreur vient en effet de la.
Tu est tombé dans un probleme de scope.
la fonction SDL_LoadBMP renvoie un SDL_Surface*, tu passe en parametre un SDL_Surface*
a la fin de ta fonction, on a bien, name pointe sur ta surface.
mais c´est le name local et pas le "name" appelant.
Je m´explique

void toto (int t)
{ t=3;}

int main ()
{
int waf = 42;
toto(waf);
printf ("%d\n", waf); //affiche 42 et non 3
}

je pense que tu voulais écrire:
void LoadSprite(SDL_Surface **name, char directory[20])
{

  • name = SDL_LoadBMP(directory);

}

et tu appele la fonction par
SDL_Surface *s;
LoadSprite (&s, "totoblabla");

Musashi001
Musashi001
Niveau 10
21 août 2005 à 14:48:48

"Je comprends mal pourquoi tu veux faire une fonction qui lance une fonction (c´est mauvais pour les performances, c´est mauvais pour la taille du exe et ça correspond simplement à lancer cette fonction sans se compliquer la vie)..."
------------------------------------
En fait je voulais charger un sprite dans un pointeur que je puisse réutiliser ensuite. Le principal intéret étant de faire genre une fonction qui prends en paramatre un pointeur et 2-3 autres trucs eet ensuite faire des rectangles temporaires pour l´afficher direct à l´écran.

C´est qu´un exemple, je ne compte pas l´utiliser comme ça! :-)

-----------------------------------------------
La fonction que j´ai donné dans mon post plus haut était:
2 SDL_Surface LoadSprite(SDL_Surface *name, char directory[20])
3 {
4 name = SDL_LoadBMP(directory);
5 }

Cependant si elle était comme ça, c´est due à une innatention de ma part (en faisant dees tests j´ai essayé de rajouter des valeurs de retours comme vous le voyez) J´ai éffacé le return mais j´ai oublié de remttre le void. Voila donc ma fonction originelle:
2 void LoadSprite(SDL_Surface *name, char directory[20])
3 {
4 name = SDL_LoadBMP(directory);
5 }
-----------------------------------------
godrik> Apparament t´as tout compris, toi ça m´a parfaitement l´air dêtre ce que je voulais faire avec une syntaxe corecte!

Merci à tous ceux qui ont répondu, je vais tester ça!

yojapan
yojapan
Niveau 7
21 août 2005 à 15:14:56

yup salut musashi ^^

Musashi001
Musashi001
Niveau 10
21 août 2005 à 16:11:45

Bon je confirme, ce coup si ça marche normalement, grace à la correction de godrik.

Salutyojapan ^^

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