2013-02-15 23 views
5

Ho avuto questo problema prima ma ho trovato un problema, solo che questa volta non è un'opzione.Impossibile risolvere la funzione "stof"

Sto cercando di utilizzare la funzione di 'tessuto', ma sto ottenendo gli errori dicendo: 'tessuto' non è un membro di 'std' Funzione 'tessuto' non poteva essere risolto

I' sto utilizzando nel modo esatto se spettacoli in questa pagina: http://www.cplusplus.com/reference/string/stof/

Ed ecco la mia include:

#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 

Allora, che cosa faccio di sbagliato? E se una soluzione non può essere trovata, qualcuno potrebbe indicarmi un altro modo per convertire la stringa in float e farla lanciare un'eccezione se la stringa non fosse compatibile?

MODIFICA: aggiornamento con programma di esempio ed errori.

#include <iostream> 
#include <sstream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string testString = ""; 
    float testFloat = 0.0; 
    testFloat = std::stof(testString); 

    return 0; 
} 

Gli errori ottengo sono:

Descrizione Percorso Resource Location Type 'tessuto' non è un membro di 'std' main.cpp/Assegnazione/linea src 33 C/C++ Problema

Descrizione Percorso Resource Location Type funzione 'tessuto' non può essere risolto linea main.cpp/Assegnazione/src 33 errore semantico

+7

'std :: stof' è nuovo nello standard C++ 11. Sei sicuro di usare un compilatore compatibile con C++ 11? –

+1

Non sono sicuro, non ho molta esperienza con C++, ma ho "-std = C++ 11" come uno dei miei comandi –

+0

Puoi anche provare -stdlib = libC++ –

risposta

6

Si sta utilizzando stof correttamente. Questo è un known bug nella versione MinGW di gcc 4.7.2. Dovrebbe essere corretto per gcc 4.8. Esistono numerosi esempi su SO per convertire stringhe in numeri. Ecco one. Dovrai eseguire il rollover per ottenere il comportamento di eccezione che desideri, ma gli esempi dovrebbero iniziare.

+0

Ah, questo spiegherebbe tutto allora. Sai di qualsiasi altro modo in cui posso convertire una stringa in float e farla lanciare un'eccezione se non sono compatibili? –

+2

['boost :: lexical_cast'] (http://www.boost.org/doc/libs/1_53_0/doc/html/boost_lexical_cast/synopsis.html#boost_lexical_cast.synopsis.lexical_cast) genera un'eccezione quando fallisce. –

7

stof è una funzione C++ 11. Assicurati che il tuo compilatore lo supporti (nessun compilatore ha ancora pieno supporto per C++ 11, anche se la maggior parte dei compilatori moderni in questo momento supportano un sottoinsieme abbastanza grande).

Su g ++ per esempio è necessario abilitarlo con l'opzione -std=c++11 (std=c++0x pre g ++ - 4.7).

Se si utilizza g ++, verificare quale versione si utilizza con g++ -v - se si tratta di una versione precedente (ad esempio 4.2, ad esempio), la funzionalità C++ 11 non sarà disponibile.

+0

Ho compilato con "-v" e trovato: gcc versione 4.7.2 (GCC) Nel rapporto di costruzione –

+1

Appena testato con gcc 4.7 .2, funziona sicuramente sia con '-std = C++ 11' e' -std = C++ 0x'. –

Problemi correlati