2013-02-15 17 views
5

Miałem ten problem wcześniej, ale znalazłem pracę, tylko tym razem praca nie jest opcją.Funkcja 'stof' nie mogła zostać rozwiązana

Próbuję użyć funkcji 'Stof' ale ja dostaję błędy mówiąc: Stof '' nie jest członkiem 'std' Function 'stof' nie mógł być rozwiązany

I używam go dokładnie w sposób, jeśli występują na tej stronie: http://www.cplusplus.com/reference/string/stof/

A tutaj są moje obejmuje:

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

Więc, co robię źle? A jeśli nie można znaleźć rozwiązania, ktoś mógłby wskazać mi inny sposób konwersji łańcucha na zmiennoprzecinkowe i skłonić go do zgłoszenia wyjątku, jeśli ciąg nie byłby zgodny?

EDYCJA: Aktualizacja za pomocą przykładowego programu i błędów.

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

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

    return 0; 
} 

Błędy dostaję to:

Opis Ścieżka zasobów Lokalizacja Rodzaj 'stof' nie jest członkiem 'std' main.cpp/cesja/linii src 33 C/C++ Problem

Opis Ścieżka zasobów Lokalizacja Rodzaj funkcja 'stof' nie mógł być rozwiązany linię main.cpp/cesja/src 33 semantyczna Error

+7

'std :: stof' jest nowy w standardzie C++ 11. Czy na pewno używasz kompilatora zgodnego z C++ 11? –

+1

Nie jestem pewien, nie jestem zbyt doświadczony w C++, ale mam "-std = C++ 11" jako jedno z moich poleceń –

+0

Możesz również spróbować -stdlib = libC++ –

Odpowiedz

6

Używasz prawidłowo stof. Jest to known bug w kompilacji MinGW gcc 4.7.2. Należy go naprawić dla gcc 4.8. Istnieje wiele przykładów SO dla konwersji łańcuchów na liczby. Oto one. Będziesz musiał przetasować własne, aby uzyskać zachowanie wyjątku, które chcesz, ale przykłady powinny zacząć.

+0

Ah, to by wszystko tłumaczyło. Czy znasz inny sposób, w jaki mogę przekonwertować ciąg na zmiennoprzecinkowe i czy wyrzuci wyjątek, jeśli nie są one zgodne? –

+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) zgłasza wyjątek w przypadku niepowodzenia. –

7

stof jest C++ 11 funkcji. Upewnij się, że twój kompilator go obsługuje (żaden kompilator nie ma jeszcze pełnej obsługi C++ 11, chociaż większość współczesnych kompilatorów obsługuje teraz dość duży podzbiór).

Na przykład na g ++ konieczne jest włączenie go za pomocą opcji -std=c++11 (std=c++0x pre g ++ - 4.7).

Jeśli używasz g ++, sprawdź, której wersji używasz z g++ -v - jeśli jest to stara wersja (na przykład 4.2 na przykład), funkcjonalność C++ 11 nie będzie dostępna.

+0

Skompilowałem z "-v" i znalazłem: gcc wersja 4.7.2 (GCC) W raporcie o kompilacji –

+1

Właśnie testowane z gcc 4.7 .2, zdecydowanie działa zarówno z '-std = C++ 11' i' -std = C++ 0x'. –

Powiązane problemy