模板类里面的嵌套类,如何重载输出运算符?
定义了一个双向链表的类模板,里面嵌套定义一个类作为迭代器,希望通过一系列重载这个嵌套的类的运算符实现跟STL库一样的功能。
首先是个一个双向链表类模板的一部分声明代码,里面定义了一个自己的迭代器嵌套类。
template <typename T>
class MyList
{
public:
class MyIterator
{
private:
Node<T> *pos;
public:
MyIterator() { pos = NULL; }
MyIterator(Node<T> * val) { pos = val; }
MyIterator & operator ++ ()
{
pos = pos->GetNext();
return *this;
}
MyIterator operator ++ (int)
{
MyIterator temp(this->pos);
pos = pos->GetNext();
return temp;
}
bool operator != (MyIterator val)
{
return ((pos->GetNext() != val.pos->GetNext())||(pos->GetPre() != val.pos->GetPre()));
}
void SetPos(Node<T> * val) {pos = val;}
Node<T>* GetPos() { return pos; }
};
private:
Node<T> *pFirst;
Node<T> *pLast;
MyIterator iter;
public:
............
............
然后是希望通过重载 << 运算符,实现直接操作在自定义的迭代器上就能输出迭代器所指数据的功能,如下的代码:
int i = 10;
Node<int> node(i);
MyList<int> list;
list.push_front(node);
cout << node << endl;
MyList<int>::MyIterator myiter = list.Begin();
cout << myiter << endl; // 直接对迭代器输出
以下是我重载运算符的代码的一部分,但是编译不通过,不知道应该怎么写了。。。。
template <typename T>
ostream & operator << (ostream & os, MyList<T>::MyIterator<T> &n)
{
return os << n.iter->GetData() << endl;
}
以上代码编译不通过
请教大家问题在哪里,应该怎么修改?
大概一起涉及了嵌套类,类模板,运算符重载,友元等C++功能,真的搞晕了。。。。。。。