| |
Consulter les messages sans réponse | Consulter les sujets actifs
| Auteur |
Message |
|
sanctus
|
Publié: 31 Oct 2002, 19:05 |
|
 |
| Répond à tout! |
 |
Inscription : 10 Jan 2002, 14:09 Message(s) : 2386 Localisation : Verdun
|
Bonjour, je sais que c'est de la prog, mais je suis presque convaicu que je vais avoir plus de réponse ici ;-)
J'avais fais quelque p'tit programme l'été passé, faute de temps je ne m'y était pas encore remis. Voila , maintenant je prend les memes programme, mais avec gcc 3.2 au lieu de 2.95 et je recois l'erreur suivante :
Code : In file included from /usr/include/c++/3.2/backward/iostream.h:31, from sap2nucl.cpp:4: /usr/include/c++/3.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated. sap2nucl.cpp: In function `int main()':
OK, maintenant apres 1:30 de fouille sur internet pour le "section 17.4.1.2 of the C++ standard" j'ai rien trouver a par de dire qu'il devait l'améliorer. Voici le genre de programe tout a faire ridicule qui ne passe pas a cause de ca : Code : #include <iostream.h>
int main(void) { char ch; // réimprime a l'écran jusqu'a ce que l'entrée soit au EOF while (cin.get(ch)){ cout << char(ch) << " point virgule" << '\n'; } return 0; }
voyez, meme avec pas de code comme ca, sa chie ;-(
Quelque pourrait-il me donner un ptit coup de main
ok, si je rajoute le -Wno-deprecated, ca fonctionne avec le
iostream.h
Mais comment je fais pour savoir comment me mettre a jour
car, si j'utilise le iostream (sans le .h de la nouvelle version).
je recois des erreur comme quoi mon "cin" ou "cout". ne sont pas déclarer?!?
C++ devient-il fou?
Merci
SanctuS
|
|
| Haut |
|
 |
|
blacklight
|
Publié: 31 Oct 2002, 19:42 |
|
 |
| Occasionnel |
 |
Inscription : 08 Jan 2002, 22:43 Message(s) : 140 Localisation : Québec
|
Ok, assez simple:
#include <iostream.h>
c'est un "vieux" header du C++; qui reste la pour raison de compatibilite.
Toutefois, quand tu utilises
#include <iostream>
ca t'oblige a utiliser les "namespace". soit une sorte de prefixe std:: devant toutes les choses que tu utilise de la librairie standard. La solution la plus simple pour toi est de mettre
using namespace std;
tout de suite apres ton include; ca va regler ton probleme.
Donc, ton programme final est:
Code : #include <iostream> using namespace std;
int main(void) { char ch; // réimprime a l'écran jusqu'a ce que l'entrée soit au EOF while (cin.get(ch)){ cout << char(ch) << " point virgule" << '\n'; } return 0; }
Je pourrais divaguer sur l'importance des namespace... mais tout ce qui t'importe ici est que tu as a ajouter "using namespace std" afin que tout fonctionne comme avant (les cout, cin, ...)
|
|
| Haut |
|
 |
|
blacklight
|
Publié: 31 Oct 2002, 22:28 |
|
 |
| Occasionnel |
 |
Inscription : 08 Jan 2002, 22:43 Message(s) : 140 Localisation : Québec
|
Citer: Pourriez vous me dire svp ou je pourrais avoir de l'information pertinante sur ces nouvelles
Difficile a dire. Je connais les noms de quelques bons livres.
Stroustrup - C++, how to program
Deiteil & Deitel (le nom du livre m'echappe)
C++ Primer (un gros livre de reference un peu avance)
mais tout ca, c'est pour la programmation C++ "pure" (ca ne dira pas comment faire de l'interface graphique ou utiliser telle fonction du systeme)
Peut etre aussi qu'il y a de bons livres gratuits ou des tutoriels sur internet...
|
|
| Haut |
|
 |
|
sanctus
|
Publié: 01 Nov 2002, 15:12 |
|
 |
| Répond à tout! |
 |
Inscription : 10 Jan 2002, 14:09 Message(s) : 2386 Localisation : Verdun
|
Ok, ca me donne un autre probleme étrange.
Ok, imaginons le code ci-dessous :
Code : //test2.cpp #include <iostream.h>
//using namespace std;
int main(void) { cout << "Allo" << '\n'; return 0; }
compilation Code : $ g++ test2.cpp -o test2 -Wno-deprecated $ test2 Allo $ echo $? 0
Donc, tout ce fait comme avant (c'est comme avant) Maintenant avec le nouveau : Code : //test.cpp #include <iostream>
using namespace std;
int main(void) { cout << "Allo" << '\n'; return 0; }
Compilation et test : Code : $ g++ test.cpp -o test $ test $ echo $? 1
Si vous n'etes pas sous unix, echo $? sort le code de retour.
Donc il ne se rend meme pas au cout <<
.
Une idée
Merci
|
|
| Haut |
|
 |
|
Thunder
|
Publié: 02 Nov 2002, 12:59 |
|
 |
| Régulier |
 |
Inscription : 06 Jan 2002, 22:42 Message(s) : 416 Localisation : Québec
|
Allô !
sanctus a écrit: Mais étrange que avec le nouveau header j'Ai le probleme et que ca compile correctement avec l'ancien.. hummm je vais dormir la dessus
Habituellement ce que je ferais, ça serait de regarder avec quel librairie dynamique il va faire le link...
Une fois que ton programme est compilé, tu peux certainement faire un ldd question de voir comment il va chercher sa librairie.
Si je me rappel bien, par défaut il fait un link dynamique et non statique...
Une commande pratique c'est ldconfig -p | less qui va te montrer toutes les librairies dynamiques qui sont trouvées et surtout dans quel ordre il va faire sa résolution, car ça se peut que l'ancienne librairie réponde en premier et que tu ais été chanceux de ne pas avoir des coredump ou comportements plus étranges...
Ça pourra faire une place de plus à regarder si jamais tu as encore des problèmes...
Bebye !
_________________ Thunder
The two basic principles of Windows administration: - For minor problems, reboot - For major problems, reinstall
|
|
| Haut |
|
 |
|
Thunder
|
Publié: 02 Nov 2002, 21:53 |
|
 |
| Régulier |
 |
Inscription : 06 Jan 2002, 22:42 Message(s) : 416 Localisation : Québec
|
Allô !
sanctus a écrit: comment je fais pour savoir c'est quel lib* qui contient mon iostream.h ou iostream?
Ce que ça permet de faire le ldd, c'est de te donner quels sont les librairies dynamiques que ton programme a besoin pour être content...
Ton programme test qui est compilé l'est certainement avec un glibc dynamique... Selon ce que je vois, tu sembles avoir les deux versions de g++ sur ta machine (2.95 et 3.2)... Certainement que les deux applications utilisent des librairies différentes, là encore je peux me tromper...
C'est peut-être pas ça non-plus et je peux être dans les patates. C'est une avenue que je regarde quand je me mets à avoir des comportements étranges.
Aussi, regarde tes fichiers includes, iostream.h et iostream déclare certainement des choses de façon différente... C'est un peu comme le winreg.h. Pas certain, mais je crois que c'était toi qui avait des problèmes avec ça (voir un autre fil de discussion)...
ldconfig est utilisé de pair avec ldd... C'est pour dire quels sont les librairies qui sont utilisées... Par exemple, tu as des problèmes avec une application qui ne démarre pas ou n'a pas le comportement souhaitée, tu peux regarder comment les librairies dynamiques sont recherchées.
Bebye !
_________________ Thunder
The two basic principles of Windows administration: - For minor problems, reboot - For major problems, reinstall
|
|
| Haut |
|
 |
|
sanctus
|
Publié: 03 Nov 2002, 00:17 |
|
 |
| Répond à tout! |
 |
Inscription : 10 Jan 2002, 14:09 Message(s) : 2386 Localisation : Verdun
|
avec ldd test (le nom du prog compilé)
j'obtient ceci :
Code : [sanctus@AthlonXP dev]$ ldd test libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4001a000) libm.so.6 => /lib/i686/libm.so.6 (0x400de000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40101000) libc.so.6 => /lib/i686/libc.so.6 (0x40109000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Je trouve seulement le compilateur 3.2, je ne vois aucune trace du 2.96 que mandrake avait dans la version 8.1
|
|
| Haut |
|
 |
|
Thunder
|
Publié: 04 Nov 2002, 00:02 |
|
 |
| Régulier |
 |
Inscription : 06 Jan 2002, 22:42 Message(s) : 416 Localisation : Québec
|
Allô !
Vraiment, c'est étrange comme problème...
Je croyais que la version 2.96 et 3.2 étaient ensemble, mais ça ne semble pas être le cas...
Comme nous ne sommes pas capable d'avoir une sortie à l'écran, seulement un errorlevel... (C'est tout de même mieux qu'un coup de pied dans le c++).
Ce que tu peux faire c'est de suivre l'ordre de chargement des librairies... Une façon pour le voir, c'est de prendre la commande ltrace et elle va te dire les différents appels qui sont faits, ça va certainement te donner une idée où ça peut planter...
Mais bon l'étape suivante c'est de le tracer avec gdb... C'est mon côté bas niveau qui ressort dans ce temps là.
Bonne recherche...
Bebye !
_________________ Thunder
The two basic principles of Windows administration: - For minor problems, reboot - For major problems, reinstall
|
|
| Haut |
|
 |
|
Thunder
|
Publié: 05 Nov 2002, 23:13 |
|
 |
| Régulier |
 |
Inscription : 06 Jan 2002, 22:42 Message(s) : 416 Localisation : Québec
|
|
Allô !
Est-ce que ça se pourrait que ça soit une histoire de conversion des CR/LF... Ça arrive que Linux est chatouilleux sur ça...
Maintenant je ne prends pas de risques tous les fichiers qui sont pour êtres utilisés dans Linux je les mets en UNIX (0x0A) contrairement à DOS (0x0D0x0A)...
Bebye !
_________________ Thunder
The two basic principles of Windows administration: - For minor problems, reboot - For major problems, reinstall
|
|
| Haut |
|
 |
Qui est en ligne ? |
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s) |
|
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum
|
|
|
|