2010-06-02 25 views
18

C++ sau thư viện đã được biên soạn thành công trong VS2008VS2008 -> VS2010 dẫn đến lỗi STL khó hiểu

http://sourceforge.net/projects/xmlrpcc4win/files/xmlrpcc4win/XmlRpcC4Win1.0.8.zip/download

Khi tôi mở nó trong VS2010, nó đi qua quá trình thuật sĩ chuyển đổi mà không bất kỳ lỗi nào.

Bây giờ, khi tôi cố gắng để biên dịch nó trong VS2010, tôi nhận được một số lỗi STL lạ như thế này:

1>TimXmlRpc.cpp(1018): error C2039: 'back_insert_iterator' : is not a member of 'std' 
1>TimXmlRpc.cpp(1018): error C2065: 'back_insert_iterator' : undeclared identifier 
1>TimXmlRpc.cpp(1018): error C2275: 'XmlRpcValue::BinaryData' : illegal use of this type as an expression 
1>TimXmlRpc.cpp(1018): error C2065: 'ins' : undeclared identifier 
1>TimXmlRpc.cpp(1018): error C2039: 'back_inserter' : is not a member of 'std' 
1>TimXmlRpc.cpp(1018): error C3861: 'back_inserter': identifier not found 
1>TimXmlRpc.cpp(1019): error C2065: 'ins' : undeclared identifier 
1>TimXmlRpc.cpp(1031): error C2039: 'back_insert_iterator' : is not a member of 'std' 
1>TimXmlRpc.cpp(1031): error C2065: 'back_insert_iterator' : undeclared identifier 
1>TimXmlRpc.cpp(1031): error C2275: 'std::vector<_Ty>' : illegal use of this type as an expression 
1>   with 
1>   [ 
1>    _Ty=char 
1>   ] 
1>TimXmlRpc.cpp(1031): error C2065: 'ins' : undeclared identifier 
1>TimXmlRpc.cpp(1031): error C2039: 'back_inserter' : is not a member of 'std' 
1>TimXmlRpc.cpp(1031): error C3861: 'back_inserter': identifier not found 
1>TimXmlRpc.cpp(1032): error C2065: 'ins' : undeclared identifier 

Tôi không chắc chắn những gì để làm cho một số trong số này. Ví dụ: back_insert_iterator thực chất là một thành viên của std, nhưng VS dường như không nghĩ như vậy.

Làm cách nào để sửa các lỗi như thế này? Họ dường như không có ý nghĩa gì nhiều nên tôi không chắc bắt đầu từ đâu. Có lẽ một cái gì đó của nó trong cài đặt dự án của tôi?

Ví dụ, đây là dòng 1018, trong đó cung cấp cho các lỗi std:

std::back_insert_iterator<BinaryData> ins = std::back_inserter(*(u.asBinary)); 

Nếu bất cứ ai có thể cho tôi một số hướng Tôi đánh giá cao nó. Tôi mới đủ để C + + rằng tôi đang có một thời gian khó khăn để tìm ra điều này.

Trả lời

31

Bạn có thể đã quên #include <iterator> trong một số tệp của mình. Đó là nơi những thứ như back_insert_iterator được khai báo.

Trước đây, bạn có thể lấy đi bằng cách quên tệp tiêu đề đó vì nhiều tiêu đề chuẩn khác cũng đã bao gồm nó. VS2010 đã tổ chức lại các tiêu đề để thực hiện thư viện của mình tuân thủ các tiêu chuẩn hơn. Kết quả là, nó ít được tha thứ cho các tiêu đề bị thiếu, và <iterator> là một cái thường bị bỏ qua.

+0

Tôi rất vui vì nhóm Microsoft đang thắt chặt Thư viện STL. Tôi đã phải làm điều đó với SDK cho sản phẩm của chúng tôi, và chúng tôi đã phải giới thiệu nhiều thay đổi đột phá như thế này. Nhưng tất cả là tốt nhất. –

3

Từ MSDN:

Tiêu đề không còn được tự động bao gồm bởi nhiều tệp tiêu đề khác. Thay vào đó, hãy bao gồm tiêu đề đó một cách rõ ràng nếu bạn yêu cầu hỗ trợ cho các trình vòng lặp độc lập được xác định trong tiêu đề.

http://msdn.microsoft.com/en-us/library/bb531344.aspx

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