Encore moi avec une nouvelle question ![]()
alors voilà, en programmant mon petit jeu, vite fait j'ai réalisé que les diverses actions allaient bourrer mon unique page ![]()
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 ![]()
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 ![]()
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 ![]()
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? ![]()
Salut Black Chinchilla ! ![]()
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
![]()
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 ? ![]()
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 ![]()
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
Si t'as besoin d'aide en C++ je suis là pour te guider. + je suis rangerprice
Le 15 août 2015 à 04:37:43 absorbement a écrit :
Salut Black Chinchilla !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
![]()
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 fonctionBref je reprends, ya un gros bordel avec tes fichiers, d'abord pourquoi la fonction main est dans File1.cpp et pas dans main.cpp ?
Après avoir correctement placé main() dans main.cpp, ce dernier ressemble à ça: http://pastebin.com/8wTgBgrj
et File1.cpp: http://pastebin.com/5sK1tp88Ce 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/z6UZepr3J'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
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
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 ![]()
donc voici mes fichiers à nouveau (J'ai même pris le temps d'indenter comme c'est toi
)
main.h
http://pastebin.com/f0sAQ4US
main.cpp
http://pastebin.com/a5WTPUrq
player.h
http://pastebin.com/M4ZH5Wj9
player.cpp
http://pastebin.com/4cYN7dnJ
action.h
http://pastebin.com/BKnHJXcJ
action.cpp
http://pastebin.com/80ZXstcv
Déjà là je suis sûr que y'a progrès ![]()
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 ![]()
Alors là je comprends plus rien ![]()
J'ai voulu séparer mon code encore, et là c'est le bordel dans mes include ![]()
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 ![]()
Je comprends plus rien ![]()
Oh, et si j'enlève l'include main.h de player.h, il refuse de compiler lui aussi ![]()
Désolé du triple post mais je suis méga perdu ![]()
Donc du coup ça dérange pas si certains fichiers se répètent? ![]()
Les fichiers se répète pas, un mécanisme l'empêche. ![]()
...
Oooh, c'est à ça que ça sert! ![]()
Merci de l'aide
Oui c'est bien ça. ![]()
Tu devrais lire un tutoriel sur le C++ histoire de renforcer tout ça ![]()
Le 16 août 2015 à 02:49:21 absorbement a écrit :
Oui c'est bien ça.Tu devrais lire un tutoriel sur le C++ histoire de renforcer tout ça
Jamais aimé les tutos, le 3/4 du temps ils font que bêtement dire comment prog sans expliquer le raisonnement ![]()
J'ai toujours essayé des trucs et recherché de la doc au besoin
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. ![]()
Ou sinon tu peux revenir sur le forum et poser tes questions ![]()
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.Ou sinon tu peux revenir sur le forum et poser tes questions
Je préfère poser mes questions sur le fofo ![]()
Affaire résolue
Merde, je viens de poser un topic qui vous prends pour des assistants ![]()
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 ![]()
Le 16 août 2015 à 13:49:32 whiteapplex a écrit :
Bah lis les tutoriels avant de poser des questions
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 ![]()
Du coup j'ai que ma logique et l'aide venant d'autres personnes ![]()