2010-10-17 6 views
13

Trong Xcode sử dụng LLVM 2.0, khi tôi đặt dòng using namespace std; trong C++ mã của tôi, tôi nhận được cảnh báo này:LLVM Compiler 2.0: Cảnh báo với "using namespace std;"

Semantic Issue
Sử dụng chỉ thị đề cập đến mặc nhiên xác định không gian tên 'std'

Có cách nào để sửa lỗi này không? Tại sao nó đưa ra cảnh báo đó?

+1

Bạn đang đặt * chỉ * dòng đó? – GManNickG

+2

Bạn có bao gồm bất kỳ tiêu đề nào có không gian tên đó không? – JoshD

+2

Xcode 4 vẫn còn trong NDA; bạn nên đặt câu hỏi này trong diễn đàn beta dev của Apple, đó là diễn đàn duy nhất mà NDA bạn nhập vào với Apple cho phép bạn hỏi. (https://devforums.apple.com/community/xcode4 - đăng nhập chương trình dev táo của bạn là cần thiết để đọc/đăng) –

Trả lời

24

Bạn đã bao gồm bất kỳ tệp tiêu đề chuẩn nào chưa? Nếu không trình biên dịch không biết về namespace std.

Vui lòng đăng thêm mã để làm rõ.

+4

Ah, tôi đã tìm ra. Bạn nói đúng, dòng 'using namespace std;' là dòng đầu tiên (ngoài các câu lệnh #ifndef và #define) trong tệp; Tôi đã di chuyển nó sau dòng '#include 'và nó đã loại bỏ cảnh báo. GCC không bao giờ đưa ra cảnh báo đó, vì vậy tôi chưa bao giờ nghĩ về nó trước đây. Cảm ơn! –

4

tôi giải quyết vấn đề này như thế này

#include <iostream> 

using namespace std; 
/// This function is used to ensure that a floating point number is 
/// not a NaN or infinity. 
inline bool b2IsValid(float32 x) 
{ 
    if (x != x) 
    { 
     // NaN. 
     return false; 
    } 
    float32 infinity = std::numeric_limits <float32>::infinity(); 
    return -infinity < x && x < infinity; 
    return true; 

} 
3

Di chuyển using namespace std để sau #include có thể loại bỏ cảnh báo này.

-2

tôi thấy rằng câu hỏi này là khá cũ, nhưng đối với bất cứ ai kiểm tra này ra trong tương lai, tôi muốn thêm liên kết này từ tài liệu LLVM như bổ sung cho các cuộc thảo luận và cho poeple tìm kiếm để biết thêm:

LLVM Coding Standards: Do Not use using namespace std;

Tôi tin rằng tựa đề này là dấu hiệu rõ ràng lý do tại sao tôi đã chia sẻ nó để trợ giúp với câu hỏi này.

Trong LLVM, chúng tôi muốn tiền tố một cách rõ ràng tất cả số nhận dạng từ không gian tên chuẩn với tiền tố “std ::”, thay vì dựa vào “using namespace std;”.

Trong tệp tiêu đề, thêm chỉ thị 'sử dụng không gian tên XXX' gây ô nhiễm không gian tên của bất kỳ tệp nguồn nào #includes tiêu đề. Đây rõ ràng là một điều xấu.

Chỉnh sửa: Vì vậy, thay vào đó nếu sử dụng 'sử dụng không gian tên std;' rõ ràng gõ std :: cho mọi trường hợp bạn sử dụng thư viện chuẩn. Nó tránh xung đột với các không gian tên tệp nguồn. Đây là những gì báo giá ở trên từ bài viết tư vấn.

+0

Điều này không cung cấp câu trả lời cho câu hỏi. Khi bạn có đủ [danh tiếng] (http://stackoverflow.com/help/whats-reputation), bạn sẽ có thể [nhận xét về bất kỳ bài đăng nào] (http: // stackoverflow.com/help/privileits/comment); thay vào đó, [cung cấp câu trả lời không yêu cầu làm rõ từ người hỏi] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-thay thế). - [Từ đánh giá] (/ review/low-quality-posts/13390173) – cpburnz

+0

Tôi đang làm việc và chỉ cố gắng giúp đỡ những người khác trong các tình huống tương tự bằng cách cung cấp một thông tin hữu ích giải quyết vấn đề chính xác này. Tôi nghĩ câu trả lời thêm vào các câu trả lời đã được cung cấp. Nếu đây là vấn đề tôi sẽ chỉ lấy nó xuống. Nếu đó là tôi hỏi câu hỏi này, tôi muốn ai đó chia sẻ câu nói đó từ llvm với tôi. –

+1

@cpburnz Tôi đoán tôi mới đến phong cách giúp đỡ được yêu cầu được ở bởi vì với tôi nó sẽ hữu ích. Cụ thể hơn, tôi có thể thêm gì vào câu trả lời không rõ ràng này? Nó được dự định là một đề xuất thay thế cho các câu trả lời đã được đăng. –