2015-04-18 12 views
5

Tôi đã đọc this. Tôi đã thử nghiệm chương trình này trên các khối mã 13.12 IDE hỗ trợ C++11 nhưng nó đang nhận được thất bại trong biên dịch & trình biên dịch cho thấy nhiều lỗi. Nhìn vào chương trình. Nó hoạt động tốt trên trình biên dịch trực tuyến xem lỗi thisTại sao chương trình C++ này thất bại trong việc biên dịch?

// bad_array_new_length example 
#include <iostream>  // std::cout 
#include <exception> // std::exception 
#include <new>   // std::bad_array_new_length 

int main() { 
    try { 
    int* p = new int[-1]; 
    } catch (std::bad_array_new_length& e) { 
    std::cerr << "bad_array_new_length caught: " << e.what() << '\n'; 
    } catch (std::exception& e) { // older compilers may throw other exceptions: 
    std::cerr << "some other standard exception caught: " << e.what() << '\n'; 
    } 
} 

Compiler:

7 12  [Error] expected type-specifier 

7 37  [Error] expected unqualified-id before '&' token 

7 37  [Error] expected ')' before '&' token 

7 37  [Error] expected '{' before '&' token 

7 39  [Error] 'e' was not declared in this scope 

7 40  [Error] expected ';' before ')' token 

9 5  [Error] expected primary-expression before 'catch' 

9 5  [Error] expected ';' before 'catch' 

gì đang xảy ra sai ở đây? Đó có phải là lỗi trình biên dịch hoặc là C++11 không được hỗ trợ đầy đủ trong các khối mã 13.12 IDE không?

Hãy giúp tôi.

+3

Bạn đã bật * C++ 11 chưa? Trình biên dịch GCC C++ thường cần một lá cờ đặc biệt cho nó ('-std = C++ 11'). –

+1

@Tại sao các phiếu giảm giá cho câu hỏi này? Lý do là gì? – Destructor

+1

Tôi chưa bao giờ sử dụng Code :: Blocks trước đây, nhưng nó xuất hiện nó không phải là một trình biên dịch. Bạn đang sử dụng trình biên dịch nào? – Steve

Trả lời

5

Trình biên dịch của bạn không hỗ trợ std::bad_array_new_length.

Kết quả top Google cho code blocks 13.12 nói:

File CodeBlocks-13.12mingw-setup.exe bao gồm trình biên dịch GCC và gỡ lỗi GDB từ TDM-GCC (phiên bản 4.7.1, 32 bit).

GCC 4.7.1 was released in 2012. Theo this mailing list post, thậm chí thân GCC đã chỉ được hỗ trợ std::bad_array_new_length kể từ năm 2013.

Từ cắt đôi các hướng dẫn sử dụng tài liệu tham khảo GCC, chúng ta có thể xác định rằng GCC 4.8.4 doesn't have it nhưng GCC 4.9.2 does. "Trình biên dịch trực tuyến" bạn liên kết để chạy GCC 4.9.2.

Câu chuyện dài ngắn, bạn sẽ cần một GCC mới hơn.

"C++ 11 hỗ trợ" là một thuật ngữ rất rộng và bạn sẽ thấy rằng, cho đến rất gần đây, nó về cơ bản không bao giờ nghĩa hoàn chỉnh hỗ trợ C++ 11. Ví dụ: C++11 regexes weren't supported at all until GCC 4.9.

+2

Tôi đã cài đặt mingw/gcc 4.9.2 và nó không có 'std :: bad_array_new_length' (hoặc' std :: to_string'). Vấn đề có vẻ là với cổng của libstdC++, không phải với g ++ mỗi se. Có thể có một số chính trị liên quan. –

+0

@MattMcNabb: Thú vị. Vấn đề là _both_ cổng Windows _and_ phiên bản GCC cũ, trong trường hợp đó. –

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