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

Problème d'inclusion multiple de headers

lag-it
lag-it
Niveau 10
14 janvier 2004 à 17:48:53

Je suis en train de faire un petit mod pour quake3 et je viens de décider de restructurer mon code : plutot que d´ajouter de nouvelles fonctions et structures un peu partout, j´ai créé un header et un fichier c spécifique.
Seulement voila, ce cher john :) ignore apparement la coutume qui veut que chaque header commence par :

  1. ifndef GNAGNA_H
  2. define GNAGNA_H

. ..

  1. endif

Résultat : lorsque j´include " g_local.h" dans mon header, vc++ me sort 2357 erreurs de redéfinition ( a cause de l´inclusion plusieure fois du même header ) .
Je vais pas mettre des ifndef partout. Que dois-je faire ?

JeanYvesYves
JeanYvesYves
Niveau 10
14 janvier 2004 à 18:27:53

Ben si, faut mettre les #ifndef de partout !

Je serais toi , je me ferais un petit prog qui ouvre tous les . h, et ajoute les lignes correctes.

--> automatisation !

Altonfrere
Altonfrere
Niveau 10
14 janvier 2004 à 18:45:03

il est pas clair ton problème . .. tu peux pas le reformuler ? ou donner un exemple concret de ce que tu mets dans ton header ?

Pour les ifndef/define/endif des headers ya des outils qui existent pour ca.. ca s´intègre dans Visual C++ ( Add-Ins) et ca te permet de générer du code suivant des templates que tu définis toi même. Tu peux ainsi par un simple clic créer des en-têtes de fichier, des commentaires pour tes fonctions, des classes etc . .. enfin tout ce que tu veux.

1 gratuit :
http://codeguru.earthweb.com/devstudio_macros/CodeTmplEx.shtml

1 payant :
Visual Assist : http://www.wholetomato.com/

MathieuN7
MathieuN7
Niveau 10
14 janvier 2004 à 18:59:51

et ton MOD pour quake 3 tu le fais avec quoi? t´es tout seul?

DasHuhn
DasHuhn
Niveau 10
14 janvier 2004 à 19:07:04

( Là, les newbies Mathieun7 et DasHuhn, l´un débutant, l´autre bossant à la ligne de commande, sont tous les deux impressionés)

Est-ce que tu pourrais clairement nous expliquer ce que tu fais, ce que tu maitrises pour le faire, etc... si ça te dérange pas ( trop) ?

MathieuN7
MathieuN7
Niveau 10
14 janvier 2004 à 19:29:28

lol! oui je confirme je suis newbie débutant! et très impressionné

lag-it
lag-it
Niveau 10
14 janvier 2004 à 19:51:32

Je fais ce que je conseillerais à tous le monde de faire : commencer de son côté plutôt que de vouloir fonder une équipe de 15 personnes direct.
Je ne fais que du coding car c´est le domaine qui m´intéresse.
Mon objectif n´est pas de créer un mod entier seul ( irréalisable ) mais plutôt de me faire la main en vu de travailler sur le sdk de Doom 3 pour faire un mod après sa sortie, et pourquoi pas rejoindre un team.
Pour le moment; le mod s´appelle quake3xp et ressemble beaucoup à ennemy territory.
Il ne s´agit pas d´une totale conversion, mais plutôt de petits ajouts au gameplay : un système d´expérience avec de nouvelle caractéristiques à obtenir, de l´argent pour acheter des armes, et peut être des classes.
C´est très classique, mais à vocation d´apprentissage avant tout ( je ne m´attends pas à ce que cela devienne le futur counter strike :) )
C´est ce que je conseillerais à tous ceux qui commencent à maitriser un langage de programmation et qui ont envie de progresser : se lancer dans la création dans un mod pour votre jeu préféré : on apprends plein de choses et on progresse. Mais si vous préférez le mapping vous pouvez vous initier à la création de maps, ou alors à la création de models : c´est vraiment le domaine par excellence pour créer des jeux. Et après, lorsque vous avez atteint pas mal d´expérience, vous pouvez passer à une chose sérieuse et joindre un team car vous connaissez déjà l´envirronement avec lequel vous travaillez et que vous avez déjà accomplis quelque chose ( et c´est mille fois plus valorisant que rpg-maker, cherchez sur google le mod " akimbo" ( 2 armes différentes en même temps) ou " wise in death" ( expérience ) pour quake 3.

Sinon pour en revenir à mon problème : je l´ai dit, il n´y a pas de ifndef etc . .. donc lorsque je crée un nouveau fichier source et que je veux inclure un fichier déjà inclu précement, j´ai des erreurs de redéfinitions pour les defines ( mais je suis obligé d´inclure ces fichier car mon mod utilise des struct propres au moteur ) . Je suppose que l´inclusion de fichier doit se faire dans un endroit particulier pour éviter ce genre de problèmes, mais bon, il va falloir que je fasse une recherche.

Altonfrere
Altonfrere
Niveau 10
14 janvier 2004 à 20:03:08

Les includes ne posent probème que pour UN SEUL source à chaque fois.
Lors de la compilation les erreurs de redéfinitions ne peuvent apparaître que si, pour un même fichier . CPP ou . C, un header est inclus plusieurs fois ( ifndef/define ou pas).
Donc dans ton cas tu dois avoir plusieurs fois l´include d´un header sans le #ifndef.

Ensuite, il ne faut jamais déclarer de variable ( ou de structure) dans un header ! sinon tu risques d´avoir plusieurs déclarations pour la même variable.

Altonfrere
Altonfrere
Niveau 10
14 janvier 2004 à 20:06:49

D´ailleur si tu veux une petite astuce : utilise un precompiled header ! :)

Tu crées un seul fichier . h qui regroupe tous les includes et dans tes CPP tu inclus seulement celui là. Et là tu n´auras plus de problèmes d´includes récursifs ou de problèmes de redéfinition. En plus ta compilation sera accélérée ( c´est le but des precompiled headers justement).

lag-it
lag-it
Niveau 10
14 janvier 2004 à 20:29:57

:ok: Merci, je vais aller voir ça.

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