我正在实现一个向量(使用分配器类)。
explicit vector() : Capacity(0), Size(0) // first constructor
{
buffer = Free = End;
}
explicit vector(size_t sz, const T& initial = T()) // second constructor
{
Capacity = sz;
Size = sz;
buffer = alloc.allocate(sz);
for(size_t i = 0; i < sz; i++)
{
alloc.construct(buffer+i, initial);
}
}
template<typename Iterator>
vector(Iterator beg, Iterator lst) // third constructor
{
std::ptrdiff_t sz(lst - beg);
buffer = alloc.allocate(sz);
Iterator index(beg);
for(size_t i = 0; i < sz; i++)
{
alloc.construct(buffer+i, *index++);
}
Size = sz;
Capacity = sz;
}
vector(const vector<T> &rhs)
{
*this = vector<T>(rhs.begin(), rhs.end());
}
/* .... */
int main()
{
vector<int> vec1(10, 5);
vector<int> vec2(vec1.begin(), vec1.end());
/* .... */
}
这是我定义的构造函数。当我使用第三个构造函数时,我收到错误消息:
test.cpp:11:41: error: invalid conversion from ‘vector<int>::iterator {aka int*}’ to ‘long unsigned int’ [-fpermissive]
我得出的结论是编译器将第二个构造函数与第三个构造函数混淆了,因为它们都有两个参数。我能做些什么?