我最近试图找出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){}
};
答案 0 :(得分:1)
size()
是const
成员函数。从此函数中,您只能调用其他const
成员函数。由于begin()
和end()
是非size()
成员函数,因此不允许在begin()
中调用end()
和const
。
您可以使用成员变量start
和finish
来实施size()
。
size_type size() const { return size_type(finish - start); }