私はベクトルを実装しています(アロケータクラスを使用)。
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());
/* .... */
}
これが私が定義したコンストラクターです。3番目のコンストラクターを使用すると、次のエラーメッセージが表示されます。
test.cpp:11:41: error: invalid conversion from ‘vector<int>::iterator {aka int*}’ to ‘long unsigned int’ [-fpermissive]
どちらも2つの引数があるため、コンパイラーは2番目のコンストラクターと3番目のコンストラクターを混同しているという結論に達しました。私に何ができる?