Tôi cố gắng để biên dịch đoạn mã sau trên Linux dùng gcc 4.2:loại/giá trị không phù hợp trong mẫu C++ khai báo lớp
#include <map>
#include <list>
template<typename T>
class A
{
...
private:
std::map<const T, std::list<std::pair<T, long int> >::iterator> lookup_map_;
std::list<std::pair<T, long int> > order_list_;
};
Khi tôi biên dịch lớp này, tôi nhận được thông báo sau đây từ gcc:
error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’
error: expected a type, got ‘std::list<std::pair<const T, long int>,std::allocator<std::pair<const T, long int> > >::iterator’
error: template argument 4 is invalid
Tôi đã xóa tên tệp và số dòng, nhưng tất cả đều đề cập đến dòng tuyên bố bản đồ.
Khi tôi thay thế cặp trong các biểu thức này bằng một loại int hoặc một số loại cụ thể, nó biên dịch tốt. Ai đó có thể vui lòng giải thích cho tôi những gì tôi đang làm sai.