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++] Organisation du programme?

BlackChinchilla
BlackChinchilla
Niveau 10
15 août 2015 à 01:14:59

Encore moi avec une nouvelle question :hap:

alors voilà, en programmant mon petit jeu, vite fait j'ai réalisé que les diverses actions allaient bourrer mon unique page :hap:

Donc, déjà, j'ai:
http://pastebin.com/L3enZHPY main.cpp, soit, mon header.
http://pastebin.com/ikjhx9T4 file1.cpp, soit, mon fichier principal.

Et donc, j'aimerais pourvoir virer toutes mes functions d'actions (soit, pour l'instant, Rest et Mug) dans un autre fichier genre action.cpp

Mon problème étant, j'ignore comment, et mes recherche ne m'ont pas trop aidé puisque les résultats trouvés ne prennaient pas en compte la classe :(

Donc comment dois-je m'y prendre pour:
1: Rendre ma classe accessible par un autre fichier / voir même dédier un fichier pour mes classes.
2: Mettre mes fonctions d'actions dans action.cpp, de façon à les appeler via file1.cpp.

Merci d'avance pour toute aide :oui:

BlackChinchilla
BlackChinchilla
Niveau 10
15 août 2015 à 03:01:36

Le 15 août 2015 à 01:38:41 whiteapplex a écrit :
Déjà tu ne devrais pas inclure des ".cpp", c'est pas propre en c++ (même si il y a pas de différence entre .cpp et .h)
La façon standard c'est : un .cpp pour les définitions et un .h pour les déclarations.
Donc si on veut faire les choses à ta façon, ça va donner 5 fichiers:
main.cpp, avec inclus Player.h et actions.h pour les méthodes principales (celles qui manipuleront le player et feront appel à Mug, rest etc.)
Player.cpp avec inclus Player.h avec la définition des méthodes de player
actions.cpp avec inclus Player.h avec la définition de Rest et Mug
Player.h avec la déclaration de la classe Player
actions.h avec la déclaration des méthodes dont tu te sers (Rest & Mug)

Je suis pas sûr de comprendre.

À vrai dire je connais que très moyennement les termes en prog, y'a moyen de me donner un petit exemple rapide de ce que donnerais player.cpp et player.h?

Avec ça je devrais comprendre le reste :(

BlackChinchilla
BlackChinchilla
Niveau 10
15 août 2015 à 03:46:01

Trop tard pour edit, mais j'ai réussi à comprendre la base du truc, par contre j'ai un nouveau problème :(

Alors j'ai donc un .cpp et un .h de tout mes fichiers (action, player, main)

1: Dans main.cpp j'ai déclaré player.h et action.h

2: ensuite, dans player.h, comme dit, j'ai ma définition de classe :(

en viens donc à player.cpp
3: j'y ai inclus player.h ainsi que les fonctions nécéssaires (getter, setter etc)

Soit, jusqu'ici tout va bien ou presque (j'ai un petit problème que j'adresse à la fin de ce post)

4: Ensuit, action.h, j'ai déclaré que mes deux fonctions (rest et mug)
5: et action.cpp, j'ai inclus action.h ainsi que les fonctions nécessaires.

Tout va bien comme ça? :(

Si non, corrigez moi d'abords pendant que j'explique mon problème :hap:

J'ai fait un main.h que j'ai essayé de placer tout en haut de mon main.cpp, celui-ci contient donc

#pragma hdrstop
#pragma argsused

#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif

#include <string>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using std::cout;
using std::cin;
using std::string;
using std::endl;
using std::system;

Problème étant, player.h refuse de compiler à moins que je n'inclue main.h dedans, et ce même si je l'ai inclu en premier dans main.cpp, c'est pas normal, si? :(

absorbement
absorbement
Niveau 6
15 août 2015 à 04:37:43

Salut Black Chinchilla ! :hap:

Ouche, j'avais jamais vu quelqu'un utiliser son main.cpp comme ça, c'est troublant, qui utilise main.cpp comme header pour une classe :rire: :hap:

Voici un exemple de déclaration: int var;
Ici on déclare la variable "var".
Voici un exemple de définition: var = 55:
Ici on définit "var". On lui assigne une valeur.
La définition c'est le fait d'assigner une valeur à une entitée.

D'autre exemple mais avec une fonction:
int foo(); // déclaration de fonction
int foo () {...} // définition de fonction

Bref je reprends, ya un gros bordel avec tes fichiers, d'abord pourquoi la fonction main est dans File1.cpp et pas dans main.cpp ? :hap:

Après avoir correctement placé main() dans main.cpp, ce dernier ressemble à ça: http://pastebin.com/8wTgBgrj
et File1.cpp: http://pastebin.com/5sK1tp88

Ce que whiteapplex dit, c'est que conventionnellement, et en l'occurence, tu aurais du séparer les déclarations, des définitions qui sont dans ton fichier File1.cpp
et ça t'aurais donné ça au final:
File1.cpp: http://pastebin.com/mCc38tWY
File1.hpp: http://pastebin.com/z6UZepr3

J'ai remarqué que tu indentes pas certaine partis de ton code, hors moi je ne lis pas un code mal indenté, mais j'ai fais une exception comme c'est toi :hap:

Déjà avec ça, ça répond à t'as question une.

Question 2 : il te suffit d'inclure action.cpp dans file1.cpp et tu pourras bénéficier de tout le contenu de action.cpp.
Cependant, conventionnellement il faut que tu fasses action.hpp(avec les déclarations) et action.cpp(avec les définitions)

Concernant le nom du fichier: "File1.cpp", d'abord par convention le nom doit être entièrement en minuscule, ensuite il doit réfléter son contenu, renomme donc File1.cpp en player.cpp et File1.hpp en player.hpp (et n'oublie pas de modifier le #ifndef FILE1_H...en #ifndef PLAYER_H).

Avec ça ton code sera un peu plus compréhensible par l'humain lambda.

PS: Le C++ est totalement différent du Delphi :hap: Si t'as besoin d'aide en C++ je suis là pour te guider. + je suis rangerprice

Message édité le 15 août 2015 à 04:39:44 par absorbement
BlackChinchilla
BlackChinchilla
Niveau 10
15 août 2015 à 08:01:23

Le 15 août 2015 à 04:37:43 absorbement a écrit :
Salut Black Chinchilla ! :hap:

Ouche, j'avais jamais vu quelqu'un utiliser son main.cpp comme ça, c'est troublant, qui utilise main.cpp comme header pour une classe :rire: :hap:

Voici un exemple de déclaration: int var;
Ici on déclare la variable "var".
Voici un exemple de définition: var = 55:
Ici on définit "var". On lui assigne une valeur.
La définition c'est le fait d'assigner une valeur à une entitée.

D'autre exemple mais avec une fonction:
int foo(); // déclaration de fonction
int foo () {...} // définition de fonction

Bref je reprends, ya un gros bordel avec tes fichiers, d'abord pourquoi la fonction main est dans File1.cpp et pas dans main.cpp ? :hap:

Après avoir correctement placé main() dans main.cpp, ce dernier ressemble à ça: http://pastebin.com/8wTgBgrj
et File1.cpp: http://pastebin.com/5sK1tp88

Ce que whiteapplex dit, c'est que conventionnellement, et en l'occurence, tu aurais du séparer les déclarations, des définitions qui sont dans ton fichier File1.cpp
et ça t'aurais donné ça au final:
File1.cpp: http://pastebin.com/mCc38tWY
File1.hpp: http://pastebin.com/z6UZepr3

J'ai remarqué que tu indentes pas certaine partis de ton code, hors moi je ne lis pas un code mal indenté, mais j'ai fais une exception comme c'est toi :hap:

Déjà avec ça, ça répond à t'as question une.

Question 2 : il te suffit d'inclure action.cpp dans file1.cpp et tu pourras bénéficier de tout le contenu de action.cpp.
Cependant, conventionnellement il faut que tu fasses action.hpp(avec les déclarations) et action.cpp(avec les définitions)

Concernant le nom du fichier: "File1.cpp", d'abord par convention le nom doit être entièrement en minuscule, ensuite il doit réfléter son contenu, renomme donc File1.cpp en player.cpp et File1.hpp en player.hpp (et n'oublie pas de modifier le #ifndef FILE1_H...en #ifndef PLAYER_H).

Avec ça ton code sera un peu plus compréhensible par l'humain lambda.

PS: Le C++ est totalement différent du Delphi :hap: Si t'as besoin d'aide en C++ je suis là pour te guider. + je suis rangerprice

En fait tu vois, dans mon second poste j'ai changé tout ça :hap:

donc voici mes fichiers à nouveau (J'ai même pris le temps d'indenter comme c'est toi :hap: )

main.h :d) http://pastebin.com/f0sAQ4US
main.cpp :d) http://pastebin.com/a5WTPUrq

player.h :d) http://pastebin.com/M4ZH5Wj9
player.cpp :d) http://pastebin.com/4cYN7dnJ

action.h :d) http://pastebin.com/BKnHJXcJ
action.cpp :d) http://pastebin.com/80ZXstcv

Déjà là je suis sûr que y'a progrès :hap:

Et donc ma question maintenant c'est pourquoi je dois inclure main.h dans player.h :( ? (Sinon ça compile pas)

Fait plaisir de te voir sinon :noel:

BlackChinchilla
BlackChinchilla
Niveau 10
15 août 2015 à 08:53:03

Alors là je comprends plus rien :(

J'ai voulu séparer mon code encore, et là c'est le bordel dans mes include :pf:

Je poste encore tout les fichier et j'explique après :(

main.cpp
http://pastebin.com/g6PY2VsF

main.h
http://pastebin.com/sYH754Vs

player.cpp
http://pastebin.com/cUYHaiYx

player.h
http://pastebin.com/u3xGpfwT

action.cpp
http://pastebin.com/L9jMJnre

action.h
http://pastebin.com/eY6Fcazh

game.cpp
http://pastebin.com/cQMNrkdQ

game.h
http://pastebin.com/mWcnwqM4

Alors bon, j'ai lu quelque part qu'il fallait éviter de répéter des includes, or, j'arrive pas à compiler si je fout pas ce bordel :-(

J'ai besoin d'inclure player.h dans actions.cpp, sinon il refuse de compiler.
or, si j'enlève player.h de game.cpp, alors action.h refuse de compiler.

Et si j'enlève action.h de game.cpp, il refuse de compiler là aussi :pf:

Je comprends plus rien :(

BlackChinchilla
BlackChinchilla
Niveau 10
15 août 2015 à 09:03:49

Oh, et si j'enlève l'include main.h de player.h, il refuse de compiler lui aussi :pf:

Désolé du triple post mais je suis méga perdu :(

BlackChinchilla
BlackChinchilla
Niveau 10
15 août 2015 à 22:54:35

Donc du coup ça dérange pas si certains fichiers se répètent? :(

absorbement
absorbement
Niveau 6
15 août 2015 à 23:26:49

Les fichiers se répète pas, un mécanisme l'empêche. :hap:

  1. ifndef NOMFICHIER_H
  2. define

...

  1. endif // NOMFICHIER_H
BlackChinchilla
BlackChinchilla
Niveau 10
15 août 2015 à 23:37:39

Oooh, c'est à ça que ça sert! :hap:

Merci de l'aide [[sticker:p/1kkh]]

absorbement
absorbement
Niveau 6
16 août 2015 à 02:49:21

Oui c'est bien ça. :hap:

Tu devrais lire un tutoriel sur le C++ histoire de renforcer tout ça :hap:

BlackChinchilla
BlackChinchilla
Niveau 10
16 août 2015 à 02:52:17

Le 16 août 2015 à 02:49:21 absorbement a écrit :
Oui c'est bien ça. :hap:

Tu devrais lire un tutoriel sur le C++ histoire de renforcer tout ça :hap:

Jamais aimé les tutos, le 3/4 du temps ils font que bêtement dire comment prog sans expliquer le raisonnement :nah:

J'ai toujours essayé des trucs et recherché de la doc au besoin [[sticker:p/1kkn]]

absorbement
absorbement
Niveau 6
16 août 2015 à 05:44:18

C'est très bien, tu as de la ressource, mais l'érreur que tu avais faite est très grave, inclure le fichier main.cpp et s'en servir comme header pour sa classe, c'est une faute énorme.
Un tutoriel t'aurais expliqué comment faire les choses proprement. :hap:

Ou sinon tu peux revenir sur le forum et poser tes questions :hap:

BlackChinchilla
BlackChinchilla
Niveau 10
16 août 2015 à 06:19:35

Le 16 août 2015 à 05:44:18 absorbement a écrit :
C'est très bien, tu as de la ressource, mais l'érreur que tu avais faite est très grave, inclure le fichier main.cpp et s'en servir comme header pour sa classe, c'est une faute énorme.
Un tutoriel t'aurais expliqué comment faire les choses proprement. :hap:

Ou sinon tu peux revenir sur le forum et poser tes questions :hap:

Je préfère poser mes questions sur le fofo :oui:

Affaire résolue [[sticker:p/1kki]]

BlackChinchilla
BlackChinchilla
Niveau 10
16 août 2015 à 13:42:14

Merde, je viens de poser un topic qui vous prends pour des assistants :hap:

Je blâme la fatigue pour ce coup-ci, quant'à ce topic, j'avais *vraiment* un problème avec les includes, c'est un tout nouveau concept pour moi :hap:

BlackChinchilla
BlackChinchilla
Niveau 10
16 août 2015 à 14:12:35

Le 16 août 2015 à 13:49:32 whiteapplex a écrit :
Bah lis les tutoriels avant de poser des questions :doute:
C'est normal d'en avoir encore après les avoir lus, mais pour ton bien tu ne dois pas avoir besoin des autres c'est évident, ou du moins en avoir besoin le moins possible.
Il y aura surement encore des gens pour t'aider mais à termes ça te fait perdre du temps sur les solutions que tu pourrais trouver tout seul dans le futur, et ça leur fait perdre du temps aussi.

Bah j'ai beau chercher et chercher, tout ce que je vois pour mes problèmes, que ce soit tutoriels ou topics sur des sites de progs, c'est des réponses toute faites sans expliquer le pourquoi du comment :pf:

Du coup j'ai que ma logique et l'aide venant d'autres personnes :(

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