2013-10-10 25 views
5

Tôi đã học C++ và sử dụng Thiết bị đầu cuối trong vài tháng qua. Mã của tôi đã được biên dịch và chạy tốt bằng cách sử dụng g ++ và C++ 11, nhưng trong vài ngày qua nó bắt đầu cho lỗi và tôi đã có vấn đề biên dịch kể từ đó. Các chương trình duy nhất tôi có thể biên dịch và chạy phụ thuộc vào các chuẩn C++ cũ hơn.Tại sao std :: stoi và std :: mảng không biên dịch với g ++ C++ 11?

Các lỗi tôi lần đầu tiên có liên quan đến #include < mảng> trong tệp tiêu đề. Không chắc chắn lý do tại sao điều này xảy ra, nhưng tôi đã sử dụng nó bằng cách sử dụng boost/array. Một lỗi khác tôi không thể giải quyết là với std :: stoi. Cả mảng và stoi phải nằm trong thư viện chuẩn C++ 11. Tôi đã thực hiện đoạn code đơn giản sau đây để chứng minh những gì đang xảy ra:

// 
// stoi_test.cpp 
// 
// Created by ecg 
// 

#include <iostream> 
#include <string> // stoi should be in here 

int main() { 

    std::string test = "12345"; 
    int myint = std::stoi(test); // using stoi, specifying in standard library 
    std::cout << myint << '\n'; // printing the integer 

    return(0); 

} 

Cố gắng biên dịch sử dụng ECG $ g ++ -o stoi_trial stoi_trial.cpp -std = C++ 11

array.cpp:13:22: error: no member named 'stoi' in namespace 'std'; did you mean 'atoi'? int myint = std::stoi(test); ~~~~~^~~~ atoi /usr/include/stdlib.h:149:6: note: 'atoi' declared here int atoi(const char *); ^ array.cpp:13:27: error: no viable conversion from 'std::string' (aka 'basic_string') to 'const char *' int myint = std::stoi(test); ^~~~ /usr/include/stdlib.h:149:23: note: passing argument to parameter here int atoi(const char *); ^ 2 errors generated.

Tôi cũng nhận được những lỗi khi biên dịch khi sử dụng gcc hoặc clang ++ và with -std = gnu ++ 11 (tôi đoán tất cả đều phụ thuộc vào cấu trúc tệp tương tự). Tôi cũng nhận được cùng một lỗi cho dù tôi chỉ định std :: trong mã, hoặc nếu tôi chỉ định bằng cách sử dụng không gian tên std;

Tôi lo lắng rằng những vấn đề này phát sinh do cập nhật công cụ dòng lệnh tháng 9 thông qua Xcode hoặc vì tôi đã cài đặt tăng cường và điều này đã làm rối loạn thư viện C++ 11 của tôi. Hy vọng rằng có một giải pháp đơn giản.

hệ thống của tôi:

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-> dir=/usr/include/c++/4.2.1 Apple LLVM version 5.0 (clang-500.2.76) (based on LLVM 3.3svn) Target: x86_64-apple-darwin12.5.0 Thread model: posix

Thanks cho bất kỳ cái nhìn sâu sắc, bạn có thể cung cấp.

+0

Hãy thử chạy gcc/clang -v, bạn sẽ nhận được gì? Tôi biết hỗ trợ trên OSX là một chút đằng sau trò chơi khi nói đến C++ 11, có thể là một chút sau này: http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport –

+0

@TheFloatingBrain phía sau với gcc có lẽ, hỗ trợ tiếng kêu là hoàn toàn được cập nhật mặc dù – aaronman

+0

Cảm ơn ý kiến ​​của bạn. 'ecg $ clang -v' cho ' Apple LLVM phiên bản 5.0 (clang-500.2.75) (dựa trên LLVM 3.3svn) Mục tiêu: x86_64-apple-darwin12.5.0 Mô hình chủ đề: posix' và 'ecg $ gcc - v' cung cấp cho 'Được cấu hình bằng: --prefix =/Applications/Xcode.app/Nội dung/Nhà phát triển/usr --with-gxx-include-dir =/usr/include/C++/4.2.1 Phiên bản Apple LLVM 5.0 (clang-500.2.76) (dựa trên LLVM 3.3svn) Mục tiêu: x86_64-apple-darwin12.5.0 Mô hình chủ đề: posix' Điều đó có bình thường không? – user2865112

Trả lời

4

kêu vang có stdlib lạ, bạn cần phải thêm cờ sau khi bạn biên dịch

-stdlib=libc++

đoạn mã của bạn hoạt động trên mac của tôi với

g++ -std=gnu++11 -stdlib=libc++ test.cpp -o test

answer này mô tả các vấn đề

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