Các mã sau biên dịch với gcc-4.5.1 nhưng không phải trong Visual Studio 11.Visual Studio 11 thời gian biên dịch lỗi sử dụng std :: map
#include <map>
#include <array>
typedef std::pair<const unsigned int, std::array<const unsigned int, 4>> pairus;
int main(){
std::map<const unsigned int, std::array<const unsigned int, 4> > x;
std::array<const unsigned int, 4> troll = {1, 2, 3, 4};
x.insert(pairus(1, troll));
auto z = x[1];
}
1 hiện nay được ánh xạ tới std::array<> troll
. Việc chèn hoạt động tốt và chương trình biên dịch. Nhưng, ngay sau khi tôi cố gắng auto z = x[1]
-> Vì vậy cố gắng để có được mảng troll mà 1
được ánh xạ tới, chương trình không biên dịch với các lỗi sau:
error C2512: 'std::array<_Ty,_Size>::array'
: không có constructor mặc định thích hợp sẵn
gì gây ra sự khác biệt này trong hành vi giữa gcc và vs11 và cách khắc phục nó?
Cảm ơn.
Bạn có chắc 'pairus' không nên là' make_pair'? (Đừng nghĩ rằng đó là vấn đề của bạn mặc dù) – Corbin
Vâng nó hoạt động tốt với cặp đôi được loại std :: cặp <>. Hành vi biên dịch kỳ lạ này đang khiến tôi bonkers tho. – ScarletAmaranth
Ghép cặp trông như thế nào (giả sử nó là một hàm tùy chỉnh? Hoặc là bí danh của make-pair của MSVC++?). Tôi nghi ngờ vấn đề có thể nằm trong pairus bởi vì không có nhu cầu cho một constructor mặc định bất cứ nơi nào trong mã bạn đăng. (Mặc dù một ctor mặc định sẽ là cần thiết nếu bạn đã làm x [k] trong đó k không có trong bản đồ.) – Corbin