TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
Le problème de ce sujet a été résolu
| Page : 1 | |||||
| Auteur | Message | ||||
|---|---|---|---|---|---|
| 1 visiteur sur ce sujet (1 anonyme) | |||||
| Page : 1 | |||||
Zizi
|
# Posté le 25/05/2008 à 00:52:34 | ||||
|
Groupe : Membres |
Bonsoir,
voilà mon problème : j'ai cette structure toute simple => struct Case { int x; int y; }; J'aimerais créer une surcharge de l'opérateur >> pour pouvoir saisir toutes les composantes de ma structure d'un seul coup. Je sais le faire avec une classe, mais je n'ai aucune idée de comment le réaliser pour une structure, et surtout si c'est possible ou si je vais devoir transformer ma structure en classe (ce n'est pas très compliqué vous me direz, mais pas forcément utile). Merci d'avance |
||||
minirop
|
# Posté le 25/05/2008 à 00:57:57 | ||||
吸血鬼![]() ![]() |
structure et classe sont identiques hormis certains choses en rapport avec la visibilité par défaut (public ou private)
pas commencés - en cours - finis - (dernier tome lu) manga : Love Hina - Ichigo 100% - Fruits Basket - School Rumble - Death Note - Parmi Eux - One Piece (46) - Naruto (45) - Lovely Complex (10) - Fullmetal Alchimist (22) -> My Manga IDE multiplateforme pour Qt !! Qt @ IRC --> #qt-fr@irc.freenode.net |
||||
Zizi
|
# Posté le 25/05/2008 à 01:09:18 | ||||
|
Groupe : Membres |
J'ai créé un .h dans lequel se trouve ma structure.
J'ai rajouté ça derrière : std::istream& operator >> (std::istream&, Case& c); std::istream& operator >> (std::istream& in, Case& c) { in>>c.x; in>>c.y; return in; } mais cela plante à la compilation. Quel est le problème? |
||||
anonyme
|
# Posté le 25/05/2008 à 01:16:03 | ||||
|
Groupe : |
Salut,
Quelle est l'erreur donnée par le compilateur ? |
||||
Zizi
|
# Posté le 25/05/2008 à 01:27:52 | ||||
|
Groupe : Membres |
Alors je vais refaire ça plus proprement.
Voilà mon "Case.h" Code : C++
Voici les erreurs que j'obtiens (je travaille avec Visual C++) : Citation : A Gameplay.obj : error LNK2005: "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,struct Case &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@ AAV01@AAUCase@@@Z) already defined in Bataille.obj Humain.obj : error LNK2005: "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,struct Case &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AA V01@AAUCase@@@Z) already defined in Bataille.obj Joueur.obj : error LNK2005: "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,struct Case &)" (??5@YAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AA V01@AAUCase@@@Z) already defined in Bataille.obj Debug/Bataille.exe : fatal error LNK1169: one or more multiply defined symbols found Error executing link.exe. Gampeplay, Humain et Joueur sont 3 classes différentes. Sachant que si jamais j'enlève ma "surcharge", le programme compile et s'exécute comme il faut |
||||
lmghs
|
# Posté le 25/05/2008 à 01:30:27 | ||||
|
Groupe : Membres |
Cette réponse a aidé l'auteur du sujetProcède comme pour les autres fonctions, et cela ira mieux. PS: le bon en-tête pour le .h, c'est <iosfwd>, et pour le .cpp : <istream> |
||||
Zizi
|
# Posté le 25/05/2008 à 01:50:09 | ||||
|
Groupe : Membres |
Merci, voilà donc ce que j'ai fait :
mon .h Code : C++
mon .cpp Code : C++
Ca compile sans problème. Bon je ne peux pas encore tester l'exécution car j'ai une error dans mon code mais il y a déjà une progression ^^. Sinon, pourquoi le <iosfwd> pour le header et pas le <istream> ? |
||||
lmghs
|
# Posté le 25/05/2008 à 03:08:29 | ||||
|
Groupe : Membres |
<iosfwd> ne fait que dire que les types std::istream et std::ostream existent (ce qui permet de les utiliser en pointeur ou référence), mais ni ce qu'ils sont, ni ce que l'ont peut en faire. D'où le besoin de la définition pour pouvoir se servir de l'extraction dans la fonction (-> >>)
<iostream> devrait charger implicitement <istream>, <ostream>, et surtout définit std::cout, clog, cerr, et cin. Avec la séparation que je propose, les temps de compilations sont réduits là où l'on n'a pas besoin de s'encombrer des définitions des flux. (Ceci dit, cas particulier (non standard) des en-tête précompilés (stdafx.h), si tu te sers des flux dans la majorité de tes fichiers, tu peux directement inclure <istream> et <ostream> depuis stdafx.h)
Édité
le 25/05/2008 à 03:10:26
par lmghs
|
||||
Zizi
|
# Posté le 25/05/2008 à 04:36:38 | ||||
|
Groupe : Membres |
Merci beaucoup pour ton aide, ça marche parfaitement. Merci encore pour les explications également ^^.
|
||||
Retour au forum "Langage C++" ou à la liste des forums
Vous devez être inscrit pour pouvoir poster des messages
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
RSS tutoriels |
RSS news
Édité par Simple IT SARL :
Nous contacter
| Notre blog | Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
148 Zéros connectés |
8 requêtes |
0.0348s (0.0194s)
