Tôi nhận được lỗi sau trong C của tôi ++ chương trình:Không constructor mặc định thích hợp sẵn
1> c:\users\thom\documents\cworkspace\barnaby\barnaby\timezone.cpp(14) : see reference to class template instantiation 'std::map<_Kty,_Ty>' being compiled
Đây là xuống một chút trong ngăn xếp lỗi nhưng điểm đến dòng mã này:
static std::map<const std::string, Timezone> timezoneMap;
Lý do là Timezone có một hàm tạo khá phức tạp, nhưng không có hàm tạo mặc định. Dưới đây là một phần của lỗi:
c:\program files\microsoft visual studio 10.0\vc\include\map(215): error C2512: 'Timezone::Timezone' : no appropriate default constructor available
1> c: \ program files \ visual studio microsoft 10.0 \ vc \ include \ bản đồ (210): khi biên dịch hàm thành viên lớp mẫu 'múi giờ & std :: map < _Kty, _Ty> :: toán tử [] (const std :: basic_string < _Elem, _Traits, _Ax> &) '
Câu hỏi của tôi là, tại sao? Tại sao bản đồ lại cố gắng xây dựng một đối tượng Timezone? Tại sao nó cũng cần quá nếu tôi luôn đặt các vật thể hoàn chỉnh vào bản đồ của tôi? Đặc biệt, tại sao lỗi này khi tôi khởi tạo bản đồ?
+1 Nội dung hay. Lưu ý rằng đối với 'std :: map' với 'rõ ràng Foo :: Foo (int)' hàm tạo duy nhất và với hàm tạo bản sao rõ ràng, bạn luôn có thể nói 'm.insert (std :: make_pair (1, 5)); ', nhưng bạn chỉ có thể nói' m.insert (std :: make_pair (1, Foo (5))); 'trong C++ 11. –