【发布时间】:2022-01-18 08:34:04
【问题描述】:
我正在像 std::list 一样编写我的列表,所以我有这样的功能:
template <typename _Tp>
class list {
public:
// ...
iterator insert(iterator __pos, const _Tp &__val) {
// ...
}
template <typename _InputIter>
iterator insert(iterator __pos, _InputIter __begin, _InputIter __end) {
if (__begin == __end) return __pos;
// here I use the *__begin... so ...
iterator __ret = insert(__pos, *__begin);
while (++__begin != __end) insert(__pos, *__begin);
return __ret;
}
iterator insert(iterator __pos, size_t __cnt, const _Tp &__val) {
// ...
}
}
这是主要功能
int main() {
tinystd::list<int> mylist;
tinystd::list<int>::iterator it;
it = mylist.begin();
// error happens here
mylist.insert(it, 2, 20);
}
似乎编译器会选择函数template <typename _InputIter> iterator insert(iterator __pos, _InputIter __begin, _InputIter __end) 并导致错误提示indirection requires pointer operand ('int' invalid)
我想知道为什么会发生这种情况以及如何修改它。 非常感谢你^^
【问题讨论】: