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++] Utiliser des fn avec lib graphique

MrDo
MrDo
Niveau 10
11 février 2014 à 15:10:11

:salut:

Fonctions j'entends...

Je m'explique. J'utilise une lib graphique en c++ (allegro 5) et cette librairie possède bien entendu ses propres variables que ne connait pas c++.

Comme ALLEGRO_SAMPLE * music; // qui est une variable propre à cette librairie.

Le problème c'est que si je veux utiliser des fonctions pour aérer mon code comment je fais?...

Par exemple, j'ai fais une fonction (avant le 'int main()' donc) qui doit utiliser certaines commandes de la librairie.
Elles sont bien reconnues ces commandes grâce aux 'include' préalables propres à la librairie.

Par contre, dans une fonction en c++ on ne peut pas utiliser les variables définies dans le programme principal.
Donc, je suis obligé de créer mes propres variables propres à la fonction.

Sauf que lorsque j'utilise une fonction de ce type:

void termine(int numero, ALLEGRO_SAMPLE * mus)
{
ALLEGRO_SAMPLE * final = mus + char(numero); // En insinuant que j'ai intégré la librairie 'string' ...

switch(numero) {
case 1:
al_stop_sample(final); // Je veux arrêter le sample correspondant au numéro de la musique... C'est une commande de la lib graph.

etc etc...

Sauf que...
1) j'ai une erreur car je ne peux pas concaténer un quelconque caractère avec la variable de la librairie graphique!
2) de toute façon cette fonction va me créer des nouveaux 'samples' propres à la librairie au lieu de passer directement les variables demandées!

Donc soit je suis obligé de garder un code hyper lourd soit je m'y prends mal. (ce que je suppose)
Peut-être qu'en passant une variable par une adresse (avec pointeur ou adresse &) j'y arriverai mais j'ai besoin d'un peu d'aide...

Merci.

godrik
godrik
Niveau 30
11 février 2014 à 16:59:29

Je ne connais pas allegro, mais en general ce genre de lib propose un niveau d'abstraction de ton probleme et c'est a toi d'encapsuler cette lib pour qu'elle face ce dont tu as besoin. La lib propose un ensemble de fonction pour la minupuler et c'est ca qu'il faut utiliser.

MrDo
MrDo
Niveau 10
11 février 2014 à 17:23:22

Je ne demande pas que l'on connaisse allegro.

J'ai juste besoin d'aide sur mon codage par rapport à ce que j'explique. Si vous utilisez de fausses commandes qui n'existent pas ce n'est pas grave.
C'est l'esprit qui est important! Afin que je comprennes...
(ce serait une autre librairie le problème resterait le même je pense)

MrDo
MrDo
Niveau 10
12 février 2014 à 14:02:44

En fait, il faut que j'utilise des références pour utiliser le même paramètre c'est ça?
Sinon, godrik je comprends pas trop ce que tu veux dire... Tu peux développer un peu?

MrDo
MrDo
Niveau 10
12 février 2014 à 14:13:56

(Un exemple simple serait parfait en fait!)

dark_drow
dark_drow
Niveau 15
12 février 2014 à 14:32:18

hum si on se réfère à ça https://www.allegro.cc/manual/5/ALLEGRO_SAMPLE on peut dire une première chose :
C'est une structure, donc tu va avoir du mal à rentrer une chaine de caractère dedans.

Si c'est la doc officielle bonne chance, mais à priori on te donne pas la struture interne de ton type, on peut donc penser que c'est un "type opaque" c'est à dire que tu ne peux pas manipuler ce type de variable directement mais seulement pas le biais de fonctions présentes dans ta librairie

MrDo
MrDo
Niveau 10
12 février 2014 à 20:28:06

Tout à fait, c'est ce que je me disais. Donc, il m'est impossible de manipuler ça en dehors du programme principal? C'est-à-dire dans une fonction définie préalablement comme dans mon exemple?

godrik
godrik
Niveau 30
12 février 2014 à 22:02:32

MrDo, je pense que tu essaye de bruler des etapes et que c'est pour ca que tu n'y arrives pas. Le probleme n'est pas un probleme lier a allegro ou au libs graphiques. Il est simplement lie a la notion de type. Ca n'as pas de sens d'ajouter une chaine de caractere a un a pointeur.

Je te conseil de (re)lire attentivement un cours de C++.

MrDo
MrDo
Niveau 10
13 février 2014 à 01:09:32

Bah le problème c'est que j'ai été obligé d'apprendre le c++ sur le tard... Donc je fais comme je peux.
Plus de précision et explications m'aideraient encore une fois! :hum:

godrik
godrik
Niveau 30
13 février 2014 à 01:17:49

C'est pas une question de l'apprendre sur le tard ou quoi que ce soit. C'est une question de l'apprendre proprement. Le simple fait que tu essaye d'additionner un pointeur et une chaine de caractere me dit que tu cherches a bruler des etapes dans ton apprentissage et que tu ne comprends pas ce que tu fais.

Laisses tomber l'idee de faire une application et apprends le C++ formellement. Il y a de bon cours en ligne. Par exemple, celui ci: http://cpp.developpez.com/cours/cpp/

Une plus longue liste de document : http://cpp.developpez.com/cours

MrDo
MrDo
Niveau 10
13 février 2014 à 13:37:57

J'ai pas le temps de tout apprendre.
Je préfère que tu me dises sur quel chapitre je dois insister pour régler mon problème.
Car au risque de te déplaire tu m'aides toujours pas là mis à part me donner des liens globaux et une légère indication dans ton premier post.

MrDo
MrDo
Niveau 10
13 février 2014 à 13:42:26

Ce qui m'énerve c'est que tu me donnes des leçons d'apprentissage sauf que le c++ j'ai déjà appris. Mais comme j'ai commencé sur le c il y a bien des années certaines notions restent abstraites pour moi.
Ce n'est pas en me prenant de haut et me dire de tout réapprendre que je vais avancer! :ok:

Cordialement.

godrik
godrik
Niveau 30
13 février 2014 à 17:39:49

Chapitre 1.2 sur le typage, chapitre 4 sur les pointeurs et chapitre 6 sur la programmation modulaire me semblent approprie.

Franchement, je ne sais pas ou tu as appris le C++, mais la question est proche de ne pas avoir de sens. En C++ les variables ont des types. La seule facon de changer les valeur des valeur est d'utiliser un ensemble d'operateur. Ces operateurs agissent sur des operandes qui sont elles memes types. Tu essayais dans ton code d'ajouter un pointeur sur une structure interne de ta lib et un char*. Il n'y a pas d'operateur d'addition qui fasse ca.

Quand a la questoin plus general de: comment aller changer les variables internes d'une lib. La bonne reponse est "on ne le fait pas". Si la lib n'expose pas une variable, c'est justement dans le but que tu n'y touche pas. Toutes les modifications de l'etat interne d'une lib ne peut etre fait que part la manipulation de l'interface expose par cette lib. En bref, lis la doc de la lib pour voir quel sont les operations possible.

Pour finir un conseil general. Personne n'a jamais fait une application stable et interessante en C++ en allant dans le probleme comme un bourin. Tu fais ce que tu veux, c'est ton temps que tu gaches. Mais tu ferais mieux de poser des bases propres de C++ avant d'essayer de developper quelquechose de complexe comme une application graphique. Parceque quand les bugs un peu bizarre vont apparaitre, il sera beaucoup trop tard pour les resoudre.

MrDo
MrDo
Niveau 10
13 février 2014 à 23:30:05

Ah merci quand même de rentrer un peu plus en avant dans les explications.
C'est ce que j'attendais. Le c++ est un des langages les plus complexe.
Très complet.

Et il est normal quand on a pas été élevé à la programmation orienté objet, de ne pas capter toutes ses subtilités.
Après comme j'ai dis j'ai quand même un passif sur ce langage et je ne fais pas "le bourrin" mais il y a peut-être des notions que j'ai oubliées.

Merci néanmoins pour les chapitres que tu m'as indiqué! Je vais essayé de bosser ça...

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