[C++] include de librairie et conseil sur structure de main

include de librairie et conseil sur structure de main [C++] - C++ - Programmation

Marsh Posté le 26-09-2004 à 04:29:04    

j'ai terminé un travail que j'aimerais paufiner un peu avant de le remettre. En gros j'ai 2 trucs qui me chicote l'esprit:
 

  • Diviser mon main en quelques fonctions

le main s'occupe présentement de récupérer (par paramètre si présent ou par cin) un nom de fichier, de lire les segments dans se fichier et les stocker dans un vecteur, puis faire le traitement sur le vecteur (double boucle for + if + cout)
 
le tout prend environ 50 lignes, ca vaut la peine que j'en fasse 3 fonctions ou de tout laisser dans le main est acceptable?
 
 

  • #include de mon segment.h et de mon point.h dans le tp1.cc

exemple: dans mon tp1.cc, j'ai les includes suivants
 

Code :
  1. #include <fstream>
  2. #include <iostream>
  3. #include <vector>
  4. #include "segment.h"
  5. using namespace std;


 
dans mon segment.h
 

Code :
  1. #include <iostream>
  2. #include "point.h"
  3. using namespace std;


 
si je tente de faire l'include du point.h dans mon tp1.cc, ca cause l'erreur suivante
 


In file included from segment.h:2,
                 from tp1.c:37:
point.h:4: error: redefinition of `class Point'
point.h:4: error: previous definition of `class Point'


 
alors
 
a) j'include dans mon tp1.cc mais pas dans segment.h
b) j'include dans segment.h mais pas dans tp1.cc
c) j'include dans les 2 avec une méthode X (un ifndef? ca peut marcher? comment? autres facon?)
 
edit: le segment.cc utilise 2 objets Point pour se créer. J'utilise également un objet Point dans mon tp1.cc (Point intersection), qui sera passé par référence à une méthode d'objet Segment (sIntersecteAvec) et c'est pourquoi je voulais faire l'include du point.h dans le tp1.cc aussi
 
merci


Message édité par burgergold le 26-09-2004 à 04:33:58
Reply

Marsh Posté le 26-09-2004 à 04:29:04   

Reply

Marsh Posté le 26-09-2004 à 13:19:17    

rien compris. mais tant que t'as pas mis un gardien contre l'inclusion multiple, va pas chercher ailleurs

Reply

Marsh Posté le 26-09-2004 à 13:21:56    

voir donc du coté des #define #ifdef etc...


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 26-09-2004 à 14:00:33    

#ifndef MACHINTRESUNIQUE
#define MACHINTRESUNIQUE
 
 
// code
 
 
#endif // MACHINTRESUNIQUE
 
 
 
pour la dernière fois ... MACHINTRESUNIQUE c'est un truc le plus unique possible. concatén tout ce que tu as : nom de fichier, projet, date, auteur, truc aléatoire
 
genre
 
GD_RENDERER_H_26_SEPT_2004
 
 
mais pas de LIST_H (pense aux millions de gens qui ont un jour fait un fichier list.h ...)
 
 
tu peux facilement te faire un petit script qui génère ce genre de squelette
 

Reply

Marsh Posté le 26-09-2004 à 14:02:07    

Taz a écrit :

rien compris. mais tant que t'as pas mis un gardien contre l'inclusion multiple, va pas chercher ailleurs


 
dans mon main j'ai 50 lignes de code, qui fait 3 traitements. Ca vaut la peine que j'en fasse 3 fonctions où c'est acceptable de tout laisser directeent dans le main?
 
gardien contre l'inclusion multiple -> kesako? je me doutais qu'il fallait utiliser des ifdef et ifndef mais jsavais pas trop comment (faut que jme place une constante dans mon segment.h et point.h et que je vérifis si celle-ci est déclaré?)
 
edit: tu viens de poster un truc pendant que j'écrivais, je regarde ca  :jap:


Message édité par burgergold le 26-09-2004 à 14:02:47
Reply

Marsh Posté le 26-09-2004 à 14:07:02    

ça vaut la peine de séparer en fichier ? je sais pas, mais ne serait-ce que pour apprendre à le faire, oui
 
inclusion multiple : ben si un .h est incluse plusieurs fois, ça contredit la ODR (one definition rule). Ton compilateur rejète le fait qu'une structure de données soit définie plusieurs fois dans la meme unité de compilation.

Reply

Marsh Posté le 26-09-2004 à 14:08:38    

Taz a écrit :

ça vaut la peine de séparer en fichier ? je sais pas, mais ne serait-ce que pour apprendre à le faire, oui
 
inclusion multiple : ben si un .h est incluse plusieurs fois, ça contredit la ODR (one definition rule). Ton compilateur rejète le fait qu'une structure de données soit définie plusieurs fois dans la meme unité de compilation.


 
tu voulais bien dire en fonction? :D

Reply

Marsh Posté le 26-09-2004 à 14:21:08    

je comprends pas

Reply

Marsh Posté le 26-09-2004 à 14:49:42    

Taz a écrit :

je comprends pas


 
ok
 
j'ai mon main qui fait 3 trucs
 
- Récupérer un nom de fichier (si recu en parametre, il l'utilise, sinon je demande à l'utilisateur)
- Lire le fichier, stocker tous les segments dans un vector
- Traiter le vector (vérifier quel segment s'intersecte avec un autre, en utilisant une methode de mon objet segment)
 
le tout fait 50 lignes voir moins, ca vaut la peine que je fasse 3 fonctions
- get_nom_de_fichier
- lecture_du_fichier
- traiter_les_segments
 
ou laisser ca dans le main c'est acceptable

Reply

Marsh Posté le 26-09-2004 à 14:54:29    

au vu de ton énoncé de sujet et de ce que tu viens de dire tu confonds fonction et fichier inclus :)


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 26-09-2004 à 14:54:29   

Reply

Marsh Posté le 26-09-2004 à 14:55:43    

mais ça dépend de ce que tu veux faire ... si c'est un simple programme de 3 lignes, ça va, si tu veux faire une bibliothèque, un gros projet modulaire, etc non
 
je vois pas ce que ça change pour toi, à par que tu te prends la tête avec des conneries 'est-ce que je demande un sac plastique supplémentaire à la caissière ....'

Reply

Marsh Posté le 26-09-2004 à 15:59:05    

black_lord a écrit :

au vu de ton énoncé de sujet et de ce que tu viens de dire tu confonds fonction et fichier inclus :)


 
bin javais 2 demandes au départ:
 
diviser mon main en 3 fonctions, c'est plus sympa ou non pour un prof?
fichier inclus à 2 endroits, comment faire (avec les ifdef)
 
mais comme Taz a dit, jcrois que je m'embête pour rien pour le premier, vu que y'a tellement pas de code que ca sert pas à grand chose

Reply

Marsh Posté le 26-09-2004 à 20:11:42    

jviens de bencher les 2 binaires du prof avec le mien
 


fichier de 9999 segments
22.47u 0.00s 0:22.49 99.9% tp1
26.70u 0.02s 0:26.77 99.8% Sseg1
 0.84u 0.03s 0:00.90 96.6% Sseg2
 
fichier de 49999 segments
561.21u 1.02s  9:24.66 99.5% tp1
665.65u 0.02s 11:08.90 99.5% Sseg1
  4.34u 0.02s  0:04.39 99.3% Sseg2


 
son Sseg1 utilise le même algo que nous (glouton), alors que Sseg2 a un algo sweep line, c'est assez clair que ca bouffe l'autre :D
 
mais jsuis quand même heureux de voir qu'avec le même algo, mon tp est quand meme plus rapide :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed