我正在建立一个STL列表。我创建了一个装饰类(MyList
),它是一个特殊类(ProtectMe
)的列表。我希望列表中的所有项都是const。所以这就是我所做的:
#include <list>
using namespace std;
class ProtectMe{
private:
int data_;
public:
ProtectMe(int data):data_(data){
}
int data() const{return data_;}
};
class MyList{
private:
//A list of constant pointers to constant ProtectMes.
list<const ProtectMe* const> guts_;
public:
void add(const ProtectMe& data){
guts_.push_front(&data);
}
};
我收到以下编译错误:
error: ‘const _Tp* __gnu_cxx::new_allocator::address(const _Tp&) const [with _Tp = const ProtectMe* const]’ cannot be overloaded
我还在试图解码我出错的地方。为什么这段代码不能编译?我应该改变什么?
答案 0 :(得分:2)
value_type
标准容器必须为CopyInsertable
(或MoveInsertable
)才能使push_front
正常工作。 list<const ProtectMe* const>
的值类型是常量,因此它不是CopyInsertable
。
†CopyInsertable
表示
allocator_traits<A>::construct(m, p, v);
定义良好,其中p
是指向value_type
的指针,默认情况下在p上调用placement new,因此需要它为非const指针。