2

我正在建立一个 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);
    }
};

我收到以下编译错误:

错误:'const _Tp* __gnu_cxx::new_allocator::address(const _Tp&) const [with _Tp = const ProtectMe* const]' 不能重载

我仍在挠头试图解码我出错的地方。为什么这段代码不能编译?我应该改变什么?

4

1 回答 1

2

标准容器的value_type必须是CopyInsertable(或MoveInsertable)才能push_front工作。的值类型list<const ProtectMe* const>是常量,所以不是CopyInsertable.

CopyInsertable表示

allocator_traits<A>::construct(m, p, v);

定义明确 where pis a pointer to value_type,默认情况下调用placement new on p,因此要求它是一个非常量指针。

于 2012-07-06T20:14:44.627 回答