Je dois porter du code (qui compilait sous GCC-2.95.4)
sous GCC-3 (en l'occurrence GCC-3.2.2). Je n'arrive pas
à corriger une erreur de compilation. Le code :
if (!s.ipfx(0)) {
...
l'erreur de GCC :
In function `int readline(std::istream&, String&, char, int)':
1226: no matching function for call to `std::basic_istream<char,
std::char_traits<char> >::ipfx(int)'
J'ai fait plusieurs modifs d'include avant d'en arriver là :
#include <iostream> #include <limits> #include <new> using namespace std;
Quelqu'un a-t-il une idée ?
Merci d'avance pour toute réponse !
N.
gcc 3.2.2 est conforme au standard ISO c++98 qui apparement à defini ces nouveaux fichiers d'entête
kanze
Nicolas HUYNH wrote in message news:...
Je dois porter du code (qui compilait sous GCC-2.95.4) sous GCC-3 (en l'occurrence GCC-3.2.2). Je n'arrive pas à corriger une erreur de compilation. Le code :
if (!s.ipfx(0)) { ...
l'erreur de GCC :
In function `int readline(std::istream&, String&, char, int)': 1226: no matching function for call to `std::basic_istream<char, std::char_traits<char> >::ipfx(int)'
C'est normal. Le g++ 3.0 et après implémente les flux standard, celles d'avant les flux classiques.
Avec un bon compilateur, la régle est simple : si tu inclus <iostream.h>, tu as les flux classiques, si tu inclus <istream>, les flux standard. (Même Microsoft, pour dire.) Dans le cas de g++, malheureusement...
Donc, avec les flux classique :
if ( s.ipfx() ) { // ou s.ipfx( 0 ) si tu ne veux pas sauter les blancs... // ... s.isfx() ; }
avec les flux standard :
std::istream::sentry garde( s ) ; // ou garde( s, false ) pour ne pas sauter les blancs... if ( garde ) { // ... }
À titre d'information, pour gérer les incompatibilités, je n'inclus jamais que « "gb/istream.hh" », qui ne contient que :
Le fichier gb/Global.hh inclut les dépendences, en fonction d'un -I option à la compilation (p.e. -Isparc/solaris/gcc ou -Isparc/solaris/gcc3), et donc définit GB_HASNEWIOSTREAM comme 0 ou 1 ; GB_DEPENDENT_INCLUDE est aussi défini dans Global.hh comme :
Je ne dis pas que c'est beau ; j'ai horreur des macros comme ça. Mais je n'ai pas trouvé d'autre solution.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Nicolas HUYNH <huynh@ath.cena.fr> wrote in message
news:<3F9D6E5B.5030604@ath.cena.fr>...
Je dois porter du code (qui compilait sous GCC-2.95.4) sous GCC-3 (en
l'occurrence GCC-3.2.2). Je n'arrive pas à corriger une erreur de
compilation. Le code :
if (!s.ipfx(0)) {
...
l'erreur de GCC :
In function `int readline(std::istream&, String&, char, int)':
1226: no matching function for call to `std::basic_istream<char,
std::char_traits<char> >::ipfx(int)'
C'est normal. Le g++ 3.0 et après implémente les flux standard, celles
d'avant les flux classiques.
Avec un bon compilateur, la régle est simple : si tu inclus
<iostream.h>, tu as les flux classiques, si tu inclus <istream>, les
flux standard. (Même Microsoft, pour dire.) Dans le cas de g++,
malheureusement...
Donc, avec les flux classique :
if ( s.ipfx() ) {
// ou s.ipfx( 0 ) si tu ne veux pas sauter les blancs...
// ...
s.isfx() ;
}
avec les flux standard :
std::istream::sentry garde( s ) ;
// ou garde( s, false ) pour ne pas sauter les blancs...
if ( garde ) {
// ...
}
À titre d'information, pour gérer les incompatibilités, je n'inclus
jamais que « "gb/istream.hh" », qui ne contient que :
Le fichier gb/Global.hh inclut les dépendences, en fonction d'un -I
option à la compilation (p.e. -Isparc/solaris/gcc ou
-Isparc/solaris/gcc3), et donc définit GB_HASNEWIOSTREAM comme 0 ou 1 ;
GB_DEPENDENT_INCLUDE est aussi défini dans Global.hh comme :
Je ne dis pas que c'est beau ; j'ai horreur des macros comme ça. Mais je
n'ai pas trouvé d'autre solution.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Je dois porter du code (qui compilait sous GCC-2.95.4) sous GCC-3 (en l'occurrence GCC-3.2.2). Je n'arrive pas à corriger une erreur de compilation. Le code :
if (!s.ipfx(0)) { ...
l'erreur de GCC :
In function `int readline(std::istream&, String&, char, int)': 1226: no matching function for call to `std::basic_istream<char, std::char_traits<char> >::ipfx(int)'
C'est normal. Le g++ 3.0 et après implémente les flux standard, celles d'avant les flux classiques.
Avec un bon compilateur, la régle est simple : si tu inclus <iostream.h>, tu as les flux classiques, si tu inclus <istream>, les flux standard. (Même Microsoft, pour dire.) Dans le cas de g++, malheureusement...
Donc, avec les flux classique :
if ( s.ipfx() ) { // ou s.ipfx( 0 ) si tu ne veux pas sauter les blancs... // ... s.isfx() ; }
avec les flux standard :
std::istream::sentry garde( s ) ; // ou garde( s, false ) pour ne pas sauter les blancs... if ( garde ) { // ... }
À titre d'information, pour gérer les incompatibilités, je n'inclus jamais que « "gb/istream.hh" », qui ne contient que :
Le fichier gb/Global.hh inclut les dépendences, en fonction d'un -I option à la compilation (p.e. -Isparc/solaris/gcc ou -Isparc/solaris/gcc3), et donc définit GB_HASNEWIOSTREAM comme 0 ou 1 ; GB_DEPENDENT_INCLUDE est aussi défini dans Global.hh comme :
Je ne dis pas que c'est beau ; j'ai horreur des macros comme ça. Mais je n'ai pas trouvé d'autre solution.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Nicolas HUYNH
wrote:
Nicolas HUYNH wrote in message news:...
Je dois porter du code (qui compilait sous GCC-2.95.4) sous GCC-3 (en l'occurrence GCC-3.2.2). Je n'arrive pas à corriger une erreur de compilation. Le code :
if (!s.ipfx(0)) { ...
l'erreur de GCC :
In function `int readline(std::istream&, String&, char, int)': 1226: no matching function for call to `std::basic_istream<char, std::char_traits<char> >::ipfx(int)'
C'est normal. Le g++ 3.0 et après implémente les flux standard, celles d'avant les flux classiques.
Avec un bon compilateur, la régle est simple : si tu inclus <iostream.h>, tu as les flux classiques, si tu inclus <istream>, les flux standard. (Même Microsoft, pour dire.) Dans le cas de g++, malheureusement...
Donc, avec les flux classique :
if ( s.ipfx() ) { // ou s.ipfx( 0 ) si tu ne veux pas sauter les blancs... // ... s.isfx() ; }
avec les flux standard :
std::istream::sentry garde( s ) ; // ou garde( s, false ) pour ne pas sauter les blancs... if ( garde ) { // ... }
Monsieur Kanze,
MERCI BEAUCOUP !!! Cela marche impeccablement à présent, vous m'enlevez une grosse épine du pied :-)
N.H.
PS : Désolé pour mes remerciements tardifs
À titre d'information, pour gérer les incompatibilités, je n'inclus jamais que « "gb/istream.hh" », qui ne contient que :
Le fichier gb/Global.hh inclut les dépendences, en fonction d'un -I option à la compilation (p.e. -Isparc/solaris/gcc ou -Isparc/solaris/gcc3), et donc définit GB_HASNEWIOSTREAM comme 0 ou 1 ; GB_DEPENDENT_INCLUDE est aussi défini dans Global.hh comme :
Je ne dis pas que c'est beau ; j'ai horreur des macros comme ça. Mais je n'ai pas trouvé d'autre solution.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
kanze@gabi-soft.fr wrote:
Nicolas HUYNH <huynh@ath.cena.fr> wrote in message
news:<3F9D6E5B.5030604@ath.cena.fr>...
Je dois porter du code (qui compilait sous GCC-2.95.4) sous GCC-3 (en
l'occurrence GCC-3.2.2). Je n'arrive pas à corriger une erreur de
compilation. Le code :
if (!s.ipfx(0)) {
...
l'erreur de GCC :
In function `int readline(std::istream&, String&, char, int)':
1226: no matching function for call to `std::basic_istream<char,
std::char_traits<char> >::ipfx(int)'
C'est normal. Le g++ 3.0 et après implémente les flux standard, celles
d'avant les flux classiques.
Avec un bon compilateur, la régle est simple : si tu inclus
<iostream.h>, tu as les flux classiques, si tu inclus <istream>, les
flux standard. (Même Microsoft, pour dire.) Dans le cas de g++,
malheureusement...
Donc, avec les flux classique :
if ( s.ipfx() ) {
// ou s.ipfx( 0 ) si tu ne veux pas sauter les blancs...
// ...
s.isfx() ;
}
avec les flux standard :
std::istream::sentry garde( s ) ;
// ou garde( s, false ) pour ne pas sauter les blancs...
if ( garde ) {
// ...
}
Monsieur Kanze,
MERCI BEAUCOUP !!! Cela marche impeccablement à présent,
vous m'enlevez une grosse épine du pied :-)
N.H.
PS : Désolé pour mes remerciements tardifs
À titre d'information, pour gérer les incompatibilités, je n'inclus
jamais que « "gb/istream.hh" », qui ne contient que :
Le fichier gb/Global.hh inclut les dépendences, en fonction d'un -I
option à la compilation (p.e. -Isparc/solaris/gcc ou
-Isparc/solaris/gcc3), et donc définit GB_HASNEWIOSTREAM comme 0 ou 1 ;
GB_DEPENDENT_INCLUDE est aussi défini dans Global.hh comme :
Je ne dis pas que c'est beau ; j'ai horreur des macros comme ça. Mais je
n'ai pas trouvé d'autre solution.
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Je dois porter du code (qui compilait sous GCC-2.95.4) sous GCC-3 (en l'occurrence GCC-3.2.2). Je n'arrive pas à corriger une erreur de compilation. Le code :
if (!s.ipfx(0)) { ...
l'erreur de GCC :
In function `int readline(std::istream&, String&, char, int)': 1226: no matching function for call to `std::basic_istream<char, std::char_traits<char> >::ipfx(int)'
C'est normal. Le g++ 3.0 et après implémente les flux standard, celles d'avant les flux classiques.
Avec un bon compilateur, la régle est simple : si tu inclus <iostream.h>, tu as les flux classiques, si tu inclus <istream>, les flux standard. (Même Microsoft, pour dire.) Dans le cas de g++, malheureusement...
Donc, avec les flux classique :
if ( s.ipfx() ) { // ou s.ipfx( 0 ) si tu ne veux pas sauter les blancs... // ... s.isfx() ; }
avec les flux standard :
std::istream::sentry garde( s ) ; // ou garde( s, false ) pour ne pas sauter les blancs... if ( garde ) { // ... }
Monsieur Kanze,
MERCI BEAUCOUP !!! Cela marche impeccablement à présent, vous m'enlevez une grosse épine du pied :-)
N.H.
PS : Désolé pour mes remerciements tardifs
À titre d'information, pour gérer les incompatibilités, je n'inclus jamais que « "gb/istream.hh" », qui ne contient que :
Le fichier gb/Global.hh inclut les dépendences, en fonction d'un -I option à la compilation (p.e. -Isparc/solaris/gcc ou -Isparc/solaris/gcc3), et donc définit GB_HASNEWIOSTREAM comme 0 ou 1 ; GB_DEPENDENT_INCLUDE est aussi défini dans Global.hh comme :
Je ne dis pas que c'est beau ; j'ai horreur des macros comme ça. Mais je n'ai pas trouvé d'autre solution.
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16