Newsgroup: it.comp.lang.c++
Titolo: Classe string

Ho scoperto or ora l'esistenda della classe string e c'è una cosa che mi
lascia molto perplesso: è possibile che non abbia un membro operator<<()
implementato? no perchè la prima cosa che volevo fare era stampare una
stringa con cout e ci sono riuscito solo implementando operator<< come
funzione esterna (usando il membro c_str()). Qualcuno mi può spiegare perchè
una funzione così *ovvia* non è presente? (uso vc++6)
Bye
Antonio

 una funzione cosě *ovvia* non č presente? (uso vc++6)
Nessuno te lo puň spiegare dato che č perfettamente presente nello standard
C++!


Esempietto che avevo in un file e che comnpilla senza problemi:
#include <string>
#include <iostream>
int main()
{
    std::string str1;
    std::string str2 = "La stringa inserita e': ";
    std::cout << "La lunghezza massima della stringa inseribile e': ";
    std::cout << str1.max_size() << " caratteri" << std::endl;
    std::cout << "Inserisci una stringa" << std::endl;
    std::getline(std::cin,str1);
    str2+=str1;
    std::cout << str2 << std::endl;
}
Come vedi, quello che chiedi c'è nel C++ standard.
--
Gerolamo
E' in corso la votazione di it.comp.software.webserver
Se sei interessato alla creazione di questo NG, leggi il messaggio:
news:MK.it.comp.softw...@news.nic.it

> Come vedi, quello che chiedi c'è nel C++ standard.
Beh secondo il VC++6 non deve essere tanto standard visto che questo codice
a meno che non do io l'operator<< non funziona:
std::string stringa="Ciao";
std::cout<<stringa;
con l'operator<< scritto semplicemente come:
std::ostream& operator<<(std::ostream &str, std::string stringa){
 str<<stringa.c_str();
 return str;
}
ecco il risultato se non c'è loperator (altrimenti compila)
Compiling...
Integrale.cpp
C:\antonio\Integrale\Integrale.cpp(213) : 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 co
nversion)
Error executing cl.exe.
Creating browse info file...
Integrale.exe - 1 error(s), 0 warning(s)
Grazie cmq e bye bye
Antonio

 Creating browse info file...
Semplicemente ti sei dimenticato di includere l'header string.
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

 con l'operator<< scritto semplicemente come:
no, non ci siamo.
Intendevo dire che non hai alcuna necessità di ridefinire
operatror<< in quanto già lo fa la libreria standard.
Il mio codice ti compila?
Comunque , come nota a margine, aggiungo che il VC++6 è
uscito PRIMA dello standard C++ e che sarebbe molto meglio
per te passare al VC7 o ad altri compilatori più aggiornati,
come il  gcc3.2 o il "borland c++ compiler 5.6" (anche il 5.5 è
abbastanza buono)


 a meno che non do io l'operator<< non funziona:
Hai provato semplicemente a copiare e compilare l'esempio datoti da Gerolamo
con il tuo Visual C++ 6?
Perche' anche io lo uso e funziona.
Per cui guarda cosa c'e' di differente col tuo esempio.
Hai sicuramente dimenticato qualcosa che ti provoca l'errore oppure posta
qua il tuo esempio completo.
Sbagli qualcosa al 1000%
Maurus

>Semplicemente ti sei dimenticato di includere l'header string.
beh in effetti perdona l'ignoranza ma non sapevo che ci fosse bisogno di
includerlo cmq ora ho risolto. Avevate ragione.
Grazie e bye
Antonio
ps penso (e spero) di essere finalmente riuscito a capirci qualcosa di
questi Namespaces