几天来,我一直试图找出这个问题,并在将所有内容剥离到下面的代码后终于弄清楚了。您将在下面的代码中看到 const_iterator 的构造函数的三种不同尝试,以及我在其中两个上遇到的错误。在我看来,编译器正在尝试使用 std::iterator 而不是本地声明的 mine::iterator。应该是这样吗?
其他提供线索的花絮:
如果我将 mine::iterator 命名为其他名称,例如 mine::B,则
const_iterator(const B &rhs)
可以。如果我从 std::iterator 以外的类派生 const_iterator,则
const_iterator(const iterator<T> &rhs)
可以。
感谢您提供任何信息。这是代码:
#include "stdafx.h"
#include <iterator>
namespace mine
{
template <class T>
class iterator : public std::iterator<std::random_access_iterator_tag, T, ptrdiff_t, T*, T&>
{
public:
iterator() {}
};
template <class T>
class const_iterator : public std::iterator<std::random_access_iterator_tag, T, ptrdiff_t, const T*, const T&>
{
public:
const_iterator() {}
const_iterator(const mine::iterator<T> &rhs) {} // works
//const_iterator(const iterator &rhs) {} // error C2440: initializing: cannot convert from 'mine::iterator<T>' to 'mine::const_iterator<T>'
//const_iterator(const iterator<T> &rhs) {} // error C2976: std::iterator: too few template arguments
};
}// namespace mine
using namespace mine;
int _tmain(int argc, _TCHAR* argv[])
{
iterator<int> y;
const_iterator<int> x = y;
return 0;
}