0

我正在实现一个向量(使用分配器类)。

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]

我得出的结论是编译器将第二个构造函数与第三个构造函数混淆了,因为它们都有两个参数。我能做些什么?

4

1 回答 1

1

标准向量通过iterator在自身内部有一个特殊的类来解决它,并将其用作参数。这意味着虽然参数数量相同,但参数的类型会有所不同。

于 2012-04-19T14:07:39.537 回答