Newsgroup: it.comp.lang.c++
Titolo: String

Ho un piccolo problema che non riesco a risolvere.
Quando cerco di compilare il seguente codice il compilatore (io uso BC++
5.02) mi dà una serie di messaggi di errore.
Quello che voglio sapere è se sbaglio io oppure è colpa del compilatore
usato.
-- Codice
#include <iostream>
#include <string>
using namespace std;
int main()
{
  std::string riga;
  std::cout << std::endl << "Inserire una stringa ";
  std::getline(std::cin, riga);
  std::cout << riga;
}
-- Messaggi di Errore
Error:  noname00.cpp(9,12):'cout' is not a member of 'std'
Error:  noname00.cpp(9,25):'endl' is not a member of 'std'
Error:  noname00.cpp(10,25):'cin' is not a member of 'std'
Error:  noname00.cpp(10,31):Could not find a match for
'std::getline(undefined,std::basic_string<char,std::string_char_traits<char>
,std::allocator<char>>)'
Error:  noname00.cpp(11,12):'cout' is not a member of 'std'


Il namespace std non viene supportato correttamente da
BC++5.02, mi pare sia necessario definire alcune (una) macro, comunque
elimina la using (o meglio commentala)
Paolo
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------

usato.
[.....]
A me il seguente codice funziona:
#include <iostream>
#include <string>
using namespace std;
int main()
{
  string riga;
  cout << endl << "Inserire una stringa : ";
  getline(cin, riga, '\n');
  cout << riga;
}
Bye.
Joseph Parrello - OWL/C++ Programmer
http://www.geocities.com/SiliconValley/Hills/8145
(
jopar...@geocities.com
)

using namespace std;
Come fai ad abilitare il namespace std con il BC++ 5.x?


Come fai ad abilitare il namespace std con il BC++ 5.x?
Un po' difficile come domanda per me. Io ho soltanto ripreso alcuni
esempi che si trovano nella dir \bc5\examples\stdlib. Nello specifico
ho preso il file concord.cpp e l'ho compilato. A me almeno sembra
funzionare (anche se mi da' qualche problemino con la finestra dos).
Non credo di aver usato opzioni di compilazione particolari.
Del resto avevo provato prima a commentare la riga come avevi proposto
tu, ma non e' cambiato nulla, il compilatore ha continuato a
visualizzare degli errori.
A proposito: se tu noti nel codice che ho proposto io, ho dovuto
modificare molte righe. Ad esempio e' lecito per lo standard usare
getline(....) invece di std::getline(.....)? O anche questa volta
Borland ha fatto a modo suo?
Tengo a precisare che il manuale "Programmer's Guide" e l'help online
"Standard C++ Library" affermano che le uniche due cose non
implementate nella versione di STL fornita con tale compilatore sono
"member function templates" e "use of template parameters to define
default types".
Bye.

 getline(....) invece di std::getline(.....)?
No. Ma ci sono almeno altri due modi:
1. using namespace std; all'inizio del programma
2. using std::getline; all'inizio del programma
EMG

O anche questa volta Borland ha fatto a modo suo?
???? Secondo me o non sono ancora riusciti ad adeguare gli header
allo standard oppure hanno sbagliato i conti nel tentativo di preservare
la compatibilita` all'indietro. Trovo sarebbe stato meglio fornire
una seconda versione delle librerie, una compatibile (quella vecchia)
e una adeguata allo standard.
Neanche il BCB 3 mi pare tanto vicino allo standard.
Se non fosse per l'utilita` degli editor visuali di dialoghi, menu ed 
altro, passerei subito a gcc... anzi dovrei sperimentare la possibilita`
di usare le owl con gcc, in questo modo userei il resource workshop
per le risorse, ma gcc e le sue librerie standard.
