Domanda

Sto cercando di convertire una stringa in una doppia. Il codice è molto semplice.

            double first, second;
            first=atof(str_quan.c_str());
            second=atof(extra[i+1].c_str());
            cout<<first<<" "<<second<<endl;
            quantity=first/second;

quando si cerca di convertire in più, il compilatore genera questo gioiello di saggezza a me:

  

errore: richiesta di c_str membro in   extra.std :: basic_string <_CharT,   _Traits, _Alloc> :: operator [] [con _CharT = char, _Traits = std :: char_traits, _Alloc =   std :: allocator] (((unsigned   int) (i + 1))), che è non-classe   tipo char

Non ho idea di cosa significhi. se io cout in più [i + 1], ottengo 3. Se lascio extra come una stringa, il programma tenta di div prima (2) del 51 (ascii per 3). Che diamine sta succedendo?

È stato utile?

Soluzione

Sembra extra è un std::string, così extra[i+1] restituisce un char, che è di tipo non-class.

Sembra che si sta tentando di analizzare la extra stringa a partire dalla posizione di i+1th. È possibile farlo utilizzando:

second = atof(extra.substr(i + 1).c_str());

Altri suggerimenti

Sulla base del messaggio di errore, extra è di tipo std::string. Quando si esegue extra[i+1], il risultato è di tipo char e contiene il carattere della stringa extraat posizione i+1.

Non Probabilmente quello desiderato.

Come una correzione, sostituire extra[i+1] con una nuova stringa, come segue:

extra2 = extra.substr(i+1);
// ...
second=atof(extra2.c_str());

Un modo migliore per gestire questa conversione (che è meno soggetto a errori) è usare stringstreams:

stringstream ss(str_quan);
double first;
ss >> first;

Non hai detto, ma penso che "extra" è di tipo std :: string. Così l'espressione "in più [i + 1] è il carattere "i + 1" di "extra", che sembra essere '3'.

Che cosa stai in realtà cercando di fare?

Se si desidera solo caratteri i + 1 fino alla fine di "extra" (e si sa per quanto tempo supplementare è), si desidera qualcosa di simile:

 second = atof(extra.c_str() + i + 1);

Quando si chiede aiuto è spesso reallyt usfull per fornire un esempio compilabile.

La mia ipotesi (e mi immagino enfasi becuase non c'è abbastanza informazioni sul tipo o numeri di linea).

second=atof(extra[i+1].c_str());

// Guess 
// extra is std::string.

Così in più [x] restituisce un char che non ha un metodo c_str ()

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top