Domanda:
(C++) Perché non mi funziona string?
anonymous
2010-04-07 09:01:19 UTC
Salve a tutti. Ho creato, usando Code::Blocks (ve lo dico in caso il problema fosse legato alla mia IDE) un progetto C++. Dentro di esso ovviamente C::B mi ha preparato un Main.cpp. Fin qui tutto bene. Dopo aver dichiarato una classe in A.h e definitala in A.cpp, ho provato a scriverle una funzione toString(), come in Java, usando la classe string della libreria standard. Purtroppo non potevo impostare come tipo di restituzione string perché il mio compilatore (gcc, g++) non è d'accordo. Si giustifica dicendo: "error: 'string' does not name a type. Ma io ho scritto, all'inizio del file header e del src, "#include "! La cosa strana è che l'ho inclusa anche nel main per fare una prova: lì funziona tutto, ho dichiarato stringhe su stringhe e non dà nessun errore! Sapreste spiegarmi perché?
Tre risposte:
V Ronin
2010-04-07 10:01:56 UTC
hai solamente dimenticato di mettere l' "using namespace std" nella A.cpp e dato che string è definito dentro a tale namespace, il compilatore non lo vede.

inoltre devi includere il prototipo della funzione tostring con lo stesso return type anche nell'A.h

te l'ho corretto su pastebin http://pastebin.com/sb0qFFPR



ultimo errore, che non sono stato in grado di correggere perchè non so per cosa userai la funzione toString, è che DEVE ritornare una stringa! non puoi scrivere solamente return; ma return "Ciao"; per essere valido. te l'ho segnalato con un commento su pastebin cmq
Tizio 008
2010-04-07 09:10:07 UTC
? posta il codice magari su pastebin o simili, così dalla tua spiegazione non si capisce molto bene... ovviamente g++ è un compilatore perfettamente conforme alle specifiche C++ per cui il problema è la tua conoscenza del C++, non il compilatore... :D



_add_

come detto, using namespace std... ok

ci sono però discrepanze: in A.h scrivi

char *toString();



mentre in A.cpp hai

string A::toString() { ... }



e questo già ti è stato corretto, ma mi chiedo quale fosse la reale intenzione: tornare un stringa "C" o un oggetto stringa?



nel primo caso, char *, devi allocare la memoria e copiarci dentro la rappresentazione in "char" dell'oggetto (credo che questo sia il senso di toString ...), non ti dimenticare lo '\0' finale.



nel secondo caso dovrebbe andare

return string("testo");

(cfr. fonti)



;;;



infine l'inizializzazione delle stringhe è meglio scriverla come

string nome("testo");

invece che

string nome = "testo";

che sono due cose diverse, la seconda è più, per così dire, laboriosa.
Syd Page
2010-04-11 05:28:32 UTC
Forse ti sei dimenticato di dichiarare la posizione di string nei namespace standard, puoi fare in diversi modi:



All inizio del sorgente dichiari: using std::string;

oppure: using namespace std;



Sono equivalenti ma ti consiglio di utilizzare la prima.


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...