错误:将'const Vector <int>'作为'this'参数传递给...丢弃限定符[-fpermissive]

时间:2016-12-10 06:46:02

标签: c++ vector stl

我最近试图找出SGI STL,并且我编写了自己的Vector,但是我遇到了一个简单的测试代码。当我试图编译它时,它会这样抱怨:

error: passing ‘const Vector<int>’ as ‘this’ argument of 
‘Vector<T,Alloc>::value_type* Vector<T, Alloc>::end() 
[with T = int; Alloc = __default_alloc_template<false, 0>; Vector<T, Alloc>::iterator = int*; Vector<T, Alloc>::value_type = int]’ 
discards qualifiers [-fpermissive]
size_type size() const { return size_type(end() - begin()); }

我已经查看了const函数的用法,它说如果代码没有改变类中的任何成员,那么它可以是一个const函数。

我真的不明白,size()不会改变Vector中的任何成员,只需调用另外两个函数。

我检查了SGI_vector,我认为它与我的代码完全相同。

它出了什么问题?谢谢!

int main(){
    Vector<int> v2;
    cout<<"sizeof(v2): "<<v2.size()<<endl;
    return 0;
}

我这样写了我自己的Vector:

template <class T, class Alloc = alloc>
class Vector {//primary template
public:
    typedef T value_type;
    typedef value_type* iterator;
    typedef size_t  size_type;

protected:
    typedef simple_alloc<value_type,alloc> data_allocator;
    iterator start;
    iterator finish;
    iterator end_of_storage;

public:
    iterator begin(){return start;}
    iterator end()  { return finish; }
    size_type size() const { return size_type(end() - begin()); }
    Vector():start(0),finish(0), end_of_storage(0){}
};

1 个答案:

答案 0 :(得分:1)

size()const成员函数。从此函数中,您只能调用其他const成员函数。由于begin()end()是非size()成员函数,因此不允许在begin()中调用end()const

您可以使用成员变量startfinish来实施size()

size_type size() const { return size_type(finish - start); }