[c++] string : undeclared identifier

string : undeclared identifier [c++] - Programmation

Marsh Posté le 29-03-2002 à 18:14:46    

bon voila mon prob
 
j ai fait des prog en c ca marchait nickel
 
mais la je me suis mis au c++ et j ai un prob : il trouve pas les string : undeclared identifier
 
j ai inclu que iostream.h et string.h
 
y a un autre truc a faire car la j avoue je pige pas

Reply

Marsh Posté le 29-03-2002 à 18:14:46   

Reply

Marsh Posté le 29-03-2002 à 18:23:54    

Comment ça les string ?
Si c'est les string de la STL que tu veux utiliser, tu dois faire:
 
#include <string>
 
Et enventuellement mettre juste après (la ligne d'après):
 
using namespace std;
 
(je crois - j'utilise en général les AnsiString de Borland moi)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-03-2002 à 18:38:01    

c quo la stl ?
 
moi je programme sous visual c++ 6
mais je veux un truc portable sous linux

Reply

Marsh Posté le 29-03-2002 à 18:40:57    

Bhen alors il y a des chances que ce soit les string de la STL : Standard Template Library.
Un ensemble de classes multi plate-forme.
Et comme tu es sous Visual C++ tu dois mettre le using namespace std (je crois que c'était ça)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-03-2002 à 18:41:59    

oki ca marche
 
mais c normal que le string passe pas dans le cout ?
 
si je fais
 
 std::string test;
 test = "cool";
 cout << test;
 
ca marche pas
 
F:\REMY\sauvegarde\fichier vc++\combat\Combat.cpp(68) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no acceptable conversion)

Reply

Marsh Posté le 29-03-2002 à 19:03:20    

Pas normal ça...  
Ça devrait marcher...
 
Pourquoi tu déclares std::string test ? Si tu mets juste string test ça devrait marcher...
 
Sinon essaie de modifier ton titre en "[C++] STL & string", ça attirera peut-être plus de monde. Moi j'ai pas beaucoup employé ces string.

 

[jfdsdjhfuetppo]--Message édité par antp--[/jfdsdjhfuetppo]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-03-2002 à 19:43:13    

Belgarion a écrit a écrit :

oki ca marche
 
mais c normal que le string passe pas dans le cout ?
 
si je fais
 
 std::string test;
 test = "cool";
 cout << test;
 
ca marche pas
 
F:\REMY\sauvegarde\fichier vc++\combat\Combat.cpp(68) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no acceptable conversion)  




 
non l'operateur << n'est pas surchargé pour les string de la stl
 
tu dois faire : cout << chaine.c_str() où chaine est de type string

 

[jfdsdjhfuetppo]--Message édité par ayachi--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 29-03-2002 à 20:18:46    

Pourtant que je regarde l'aide fournie avec C++Builder pour la STL il y a un truc qui y ressemble:

Citation :


operator<<(basic_ostream <charT, traits>& os,  
           const<charT, traits allocator> str);


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-03-2002 à 20:48:14    

antp a écrit a écrit :

Pourtant que je regarde l'aide fournie avec C++Builder pour la STL il y a un truc qui y ressemble:

Citation :


operator<<(basic_ostream <charT, traits>& os,  
           const<charT, traits allocator> str);

 




 
t'as vu c'est un template basic_ostream pas string, les traits sont des propriétés associés au caractère, genre taille caractère
string::c_str() retourne le tableau de caractère associé à la chaine

Reply

Marsh Posté le 29-03-2002 à 23:18:54    

desole mais je croyais que vc++ etait installer sur le pc de mes parent et apparemment je l ai virer :(  
 
donc je peux pas tester pour l instant :(  
 
en gros dans mon cas faudrait que je fasse quoi ?
 
cout << test.c_str()  
 
j ai bien compris ?

Reply

Marsh Posté le 29-03-2002 à 23:18:54   

Reply

Marsh Posté le 30-03-2002 à 00:14:47    

yes

Reply

Marsh Posté le 30-03-2002 à 11:05:54    

Citation :

operator<<
template<class E, class T, class A>
    basic_ostream<E, T>& operator<<(
        basic_ostream <E, T>& os,
        const basic_string<E, T, A>& str);
The template function overloads operator<< to insert an object str of template class basic_string into the stream os The function effectively returns os.write( str.c_str(), str.size()).


 
Pourquoi vous dites que ca ne marche pas??
 

Code :
  1. #pragma warning(disable:4786)
  2. #include <string>
  3. #include <iostream>
  4. using namespace std ;
  5. void main()
  6. {
  7.     string msg="Hello!  This is the insertion operator.";
  8.     cout << msg << endl;
  9. }


 
LEGREG

Reply

Marsh Posté le 30-03-2002 à 11:07:26    

ayachi a écrit a écrit :

 
t'as vu c'est un template basic_ostream pas string



 
le basic_ostream est le premier argument de l'operateur << !!
c'est a dire celui qui est a sa gauche puisque c'est un operateur binaire.
 
LEGREG

Reply

Marsh Posté le 30-03-2002 à 12:43:31    

legreg a écrit a écrit :

 
 
le basic_ostream est le premier argument de l'operateur << !!
c'est a dire celui qui est a sa gauche puisque c'est un operateur binaire.
 
LEGREG  




 
suis-je bête :)

Reply

Marsh Posté le 30-03-2002 à 12:45:49    

legreg a écrit a écrit :

Citation :

operator<<
template<class E, class T, class A>
    basic_ostream<E, T>& operator<<(
        basic_ostream <E, T>& os,
        const basic_string<E, T, A>& str);
The template function overloads operator<< to insert an object str of template class basic_string into the stream os The function effectively returns os.write( str.c_str(), str.size()).


 
mais t'as essayé de la faire marcher ? moi jamais, sous visual ou sous builder
 
Pourquoi vous dites que ca ne marche pas??
 

Code :
  1. #pragma warning(disable:4786)
  2. #include <string>
  3. #include <iostream>
  4. using namespace std ;
  5. void main()
  6. {
  7.     string msg="Hello!  This is the insertion operator.";
  8.     cout << msg << endl;
  9. }


 
LEGREG  



Reply

Marsh Posté le 30-03-2002 à 13:20:29    

j'en reviens pas ça marche !!!
et j'ai bossé pendant 2 ans sur des projets C++, et je me rappelles m'être vraiment galéré pour trouver la solution c'était pour le boulot, ce code j'ai essayé et jamais j'ai pu le compiler.
j'ai visual c++6 sp5, pe que c'est une mise à jour de la stl
avec le sp5 ou autre.
Belgarion essaies le code de legreg et vois si ça compiles, si non quel service pack tu as

Reply

Marsh Posté le 30-03-2002 à 14:50:38    

ca n'a rien a voir avec un service pack ou autre
l'operateur << sur les string est valide depuis l'existence
de std::iostream. (tu peux trouver la doc
chez Dinkumware ou SGI si tu ne fais pas confiance
a Microsoft)
 
Juste une question: tu n'essaierais pas d'inclure
<iostream.h> et <string.h> a tout hasard?
(ce qui a toutes les chances de ne pas marcher..
et qui me parait meme une erreur grossiere)
 
LEGREG

Reply

Marsh Posté le 30-03-2002 à 14:51:13    

Belgarion a écrit a écrit :

 
j ai inclu que iostream.h et string.h




 
pourquoi je pose la question..
 
LEGREG

Reply

Marsh Posté le 30-03-2002 à 16:02:47    

ouais t'as surement raison :), j'ai du essayer et comme avec c_str() ça marchait je me suis plus jamais posé la question.
mais en tout cas effectivement ça marche, iostream.h jamais je n'ai du inclure ça mais pas sur pour string.h, à l'époque je connaissais pas trop la stl

Reply

Marsh Posté le 30-03-2002 à 19:48:42    

en faite faur pas inclure iostream.h et string.h mais iostream et string ?
 
c pas les meme fichier en gros
 
au cas ou vous ayez pas compris je debutte en programmation
 
j ai pas de sp sous visual apparemment ca se recup ou ?

Reply

Marsh Posté le 31-03-2002 à 00:40:34    

belgarion a écrit a écrit :

en faite faur pas inclure iostream.h et string.h mais iostream et string ?




 
en gros tu fais comme dans mon programme d'exemple
(enfin plus exactement celui de Microsoft :D faudrait pas que les gens croient des choses)
 
LEGREG

Reply

Marsh Posté le 31-03-2002 à 04:30:17    

belgarion a écrit a écrit :

en faite faur pas inclure iostream.h et string.h mais iostream et string ?
 
c pas les meme fichier en gros
 
au cas ou vous ayez pas compris je debutte en programmation
 
j ai pas de sp sous visual apparemment ca se recup ou ?  




 
Les fichiers include de la stl ne sont pas en.h, ils contiennent aussi le code des templates.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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