独自のコンテナクラスを作成していますが、頭を悩ませることができない問題が発生しました。これが問題を示す最低限のサンプルです。
これは、コンテナークラスと2つのテストクラスで構成されます。1つはstd:vectorを使用するテストクラスで、2つ目は、まったく同じ方法で独自のコンテナークラスを使用しようとしますが、コンパイルに失敗します。
#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」への変換が要求されました
コンパイラーが、STLベクトルクラスではなく、自分のクラスのイテレーターをconst_iteratorに変換する場所と理由がわかりません。私は何が間違っているのですか?