我正在编写一个自己的容器类并且遇到了一个我无法理解的问题。这是显示问题的简单示例。
它由一个容器类和两个测试类组成:一个使用 std:vector 的测试类可以很好地编译,第二个测试类尝试以完全相同的方式使用我自己的容器类,但编译失败。
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
template <typename T>
class MyContainer
{
public:
class iterator
{
public:
typedef iterator self_type;
inline iterator() { }
};
class const_iterator
{
public:
typedef const_iterator self_type;
inline const_iterator() { }
};
iterator begin() {
return iterator();
}
const_iterator begin() const {
return const_iterator();
}
};
// This one compiles ok, using std::vector
class TestClassVector
{
public:
void test() {
vector<int>::const_iterator I=myc.begin();
}
private:
vector<int> myc;
};
// this one fails to compile. Why?
class TestClassMyContainer
{
public:
void test(){
MyContainer<int>::const_iterator I=myc.begin();
}
private:
MyContainer<int> myc;
};
int main(int argc, char ** argv)
{
return 0;
}
gcc 告诉我:
test2.C:在成员函数'void TestClassMyContainer::test()'中:
test2.C:51:错误:请求从“MyContainer::iterator”转换为非标量类型“MyContainer::const_iterator”
我不确定编译器在哪里以及为什么要将迭代器转换为我自己的类的 const_iterator,而不是 STL 向量类。我究竟做错了什么?