我正在寫一個自己的容器類,並遇到了一個問題,我不能得到我的頭。這是顯示問題的裸骨樣本。自己的容器類的C++迭代器和const_iterator問題
它由一個容器類和兩個測試類組成:一個測試類使用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: In member function ‘void TestClassMyContainer::test()’:
test2.C:51: error: conversion from ‘MyContainer::iterator’ to non-scalar type ‘MyContainer::const_iterator’ requested
我不知道在哪裏,以及爲什麼編譯器要迭代器轉換爲常量性爲我自己的類,但不是爲STL向量類。我究竟做錯了什麼?
非常感謝。現在我只需要看看我是否聲明const_iterator是迭代器的朋友......或者將訪問函數寫入私有迭代器成員,但這應該是可行的。 – BaCh 2010-05-16 16:20:50