Ciao Leo, non concosco la classe string, comunque in genere gli oggetti si passano per riferimento o passi un puntatore al tipo stringa.
a contiene 1. In pratica mi passa solo il 1° carattere....
Ma io vedo solo la creazione di un'oggetto mia_stringa di tipo String, non vedo assegnamenti, non so se è possibile creare istanza così String mia_stringa("costante letterale"). Comunque anche se non vedo assegnamenti se ti aspetti una lunghezza magiore di uno è perchè hai fatto assegnamento ma non si vede nel codice.
Guarda la creazione String mia_stringa e identica a String seconda_stringa, quindi stai creando una nuova istanza seconda_stringa di tipo String, e la lunghezza non è zero probabilmente a causa del marcatore fine stringa "\0".
Prova un pò così:
String mia_stringa("this is mia_stringa");
mia_funzione(mia_stringa);
void mia_funzione(String &seconda_Stringa);
{
.....
Oppure dichiari un variabile puntatore a tipo String, String *ptr_string;
e poi assegni ptr_string = &mia_stringa;
Ciao.
Corretto, mia_funzione(&mia_stringa), così passi un puntatore e devi dichiarare il prototipo :
void mia_funzione(String *str);
@Mauro:
se passo un riferimento ed uso un puntatore il compilatore non mi fa usare le conversioni tra tipi. L'esempio che ho messo è stringato, non è quello che sto facendo. Io passo una stringa letta dalla seriale ad una funzione che mi deve elaborare i dati letti. Nella funzione dovrei estrarre dal 2° carattere della stringa in poi ma se passo appunto un riferimento mi da errore usando il metodo .toCharArray dell'oggetto stringa dicendo che non può convertire fra tipi. Passando la stringa in quel modo pensavo che fosse come in Gambas, ossia passavo la variabile per valore, ma così non è....
@Brain:
ho letto, ma non trovo risposta alla mia domanda
@lesto:
sto usando il tipo String perché non so a priori quanti caratteri mi arriveranno sulla seriale per cui l'oggetto String, essendo dinamico, faceva al caso mio.
Mi sa che dovrò convertire prima in char* e poi passare questo per riferimento alla funzione.
dunque, il passaggio come puntatore(riferimento) sicuramente non deve dare problemi, se hai errori è perchè hai sbagliato qualcosa usando valori o riferimenti.
posta come stai facendo che risolviamo al volo.
Per quanto riguarda il passaggio del vero e proprio oggetto stringa per valore, e non per riferimento, il problema è un poco arduo. Non avendo mai usato il C++ (e java passa sempre e solo per riferimento) non so quale funzione di costruttore viene usata per il passaggio. Credo venga usato:
o magari un'altro metodo non implementato. ho fatto una veloce ricerca ma le guide in c++ che ho trovato non erano così avanzate, dedicandoci un pò di tempo dovresti trovare qualcosa al riguardo
Mi devo leggere qualcosa di C++, perchè dimentico i particolari.
Ora se non prendo un'abbaglio, per passare un'ogetto per valore come si fà con i tipi predefiniti, il tipo o classe devi definire un costruttore di copia, anche se ricordo che se no lo si fà C++ ne fornisce uno predefinito.
Negli esempi delle Qt, il tipo QString viene passato alle funzioni per riferimento costante, cioè così:
//prototipo
void func(const QString&)
void func(const QString &fileName)
{
......
Tuttavia Qt usa in molte classi un sistema chiamato implicit shared nelle sue classi, questo garantisce velocità e sicurezza, mentre i C++ puro la cosa più rapida è passare un puntatore e anche questo può essere costante, puoi ancora modificare l'oggetto ma non puoi modifcare il puntatore.
Come detto, non sono al PC con il codice però se a te funziona (ed il codice è uguale a quello che uso io, per lo meno nei passaggi principali), allora mi viene da pensare che il problema sia a monte e che l'algoritmo di acquisizione caratteri dala seriale abbia qualcosa che non va e che mi legga solo 1 carattere.... Domani lo ricontrollo...