2010-08-09 9 views
5

Tôi đang cố gắng biên dịch với g ++ 4.4 và liên kết một chương trình đơn giản sử dụng STL. Tôi đang cố gắng thực hiện việc này bằng cách sử dụng -fno-implicit-templates để tất cả các mẫu phải được khởi tạo rõ ràng.std :: bản đồ và -fno-ngầm-mẫu

Tôi không hiểu tại sao mã này hoạt động:

#include <map> 
//template class std::map<char,char>; 
template class std::_Rb_tree<char, std::pair <char const, char>, 
       std::_Select1st<std::pair<char const, char> >, 
       std::less<char>, std::allocator<std::pair<char const, char> > >; 

int main() { 
    std::map <char,char> table; 
return 0; 
} 

Tôi mong rằng chương trình này cần dòng: template class std::map<char,char>;, tuy nhiên dòng đó không làm cho liên kết chương trình. Cần std::_Rb_tree line. Tại sao?

Xin cảm ơn trước, mọi gợi ý sẽ được đánh giá cao.

Trả lời

7

Bản đồ sử dụng cây đỏ đen trong quá trình triển khai của chúng, do đó bạn phải nhanh chóng khởi tạo loại cây cần thiết cho việc tạo bản đồ. Điều này không giống như một lá cờ trình biên dịch đặc biệt hữu ích, IMHO.

+3

Tôi đồng ý với Neil: vấn đề của lá cờ này là bạn cần phải trình bày rõ ràng mọi thành phần của lớp, cho bạn thấy mọi chi tiết cụ thể của việc triển khai ... URK. Bạn may mắn khi bắt đầu với STL khá đơn giản, hãy thử nó với một thư viện tăng hạng nặng và bạn sẽ khóc tất cả những giọt nước mắt của cơ thể trước khi bạn thành công biên dịch. –

+4

+1 Một tên cờ trung thực hơn sẽ là - bạn-đã-được-chọn-cách-của-đau- –

+0

@chrispy: sẽ tốt hơn nếu trình biên dịch đọc nó trong giọng của Christopher Lee. – Peter