2013-02-15 38 views
5

Tôi đã có vấn đề này trước nhưng tìm thấy một công việc xung quanh, chỉ có thời gian này một công việc xung quanh không phải là một lựa chọn.Chức năng 'stof' không thể được giải quyết

Tôi đang cố gắng để sử dụng chức năng 'stof' nhưng tôi nhận được lỗi nói: 'stof' không phải là một thành viên của 'std' Function 'stof' không thể được giải quyết

tôi đang sử dụng nó trong một cách chính xác nếu chương trình trên trang này: http://www.cplusplus.com/reference/string/stof/

Và đây là bao gồm của tôi:

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

Vì vậy, những gì tôi làm sai? Và nếu một giải pháp không thể được tìm thấy có thể ai đó chỉ cho tôi một cách khác để chuyển đổi chuỗi để nổi và có nó ném một ngoại lệ nếu chuỗi không tương thích?

CHỈNH SỬA: Cập nhật với chương trình mẫu và lỗi.

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

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

    return 0; 
} 

Các lỗi tôi nhận được là:

Mô tả Resource Đường dẫn Location Loại 'stof' không phải là một thành viên của 'std' main.cpp/Chuyển nhượng/src dòng 33 C/C++ Vấn đề

Mô tả Đường dẫn tài nguyên Loại vị trí Chức năng 'stof' không thể được giải quyết main.cpp/Assignment/src line 33 Lỗi ngữ nghĩa

+7

'std :: stof' là mới trong tiêu chuẩn C++ 11. Bạn có chắc là bạn đang sử dụng trình biên dịch C++ 11 tương thích không? –

+1

Tôi không chắc chắn, tôi không quá kinh nghiệm với C++, nhưng tôi có "-std = C++ 11" là một trong các lệnh của tôi –

+0

Bạn cũng có thể thử -stdlib = libC++ –

Trả lời

6

Bạn đang sử dụng stof chính xác. Đây là một known bug trong bản xây dựng tối thiểu của gcc 4.7.2. Nó phải được sửa cho gcc 4.8. Có rất nhiều ví dụ về SO để chuyển đổi chuỗi thành số. Đây là one. Bạn sẽ phải cuộn của riêng bạn để có được hành vi ngoại lệ mà bạn muốn, nhưng các ví dụ sẽ giúp bạn bắt đầu.

+0

Ah, điều đó sẽ giải thích mọi thứ sau đó. Bạn có biết bất kỳ cách nào khác tôi có thể chuyển đổi một chuỗi thành một phao và có ném một ngoại lệ nếu chúng không tương thích không? –

+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) ném một ngoại lệ khi nó không thành công. –

7

stof là hàm C++ 11. Hãy chắc chắn rằng trình biên dịch của bạn hỗ trợ nó (không có trình biên dịch có hỗ trợ đầy đủ cho C++ 11 được nêu ra, mặc dù hầu hết các trình biên dịch hiện đại hiện có ngay bây giờ hỗ trợ một tập hợp con khá lớn).

Ví dụ: trên g ++, bạn phải bật tùy chọn -std=c++11 (std=c++0x trước g ++ - 4.7).

Nếu bạn đang sử dụng g ++, hãy kiểm tra phiên bản bạn đang sử dụng với g++ -v - nếu đó là phiên bản cũ (ví dụ 4.2 chẳng hạn), chức năng C++ 11 sẽ không khả dụng.

+0

Tôi đã biên dịch bằng "-v" và tìm thấy: phiên bản gcc 4.7.2 (GCC) Trong báo cáo xây dựng –

+1

Chỉ cần thử nghiệm với gcc 4.7 .2, nó chắc chắn hoạt động cả với '-std = C++ 11' và' -std = C++ 0x'. –

Các vấn đề liên quan