C++ VS2012无法编译,VC6.0正常解决办法

C++ VS2012无法编译,VC6.0正常又遇到了无法编译的问题,但不知道应该怎么做,就是一个迭代器的运用。VS2012无

C++ VS2012无法编译,VC6.0正常
又遇到了无法编译的问题,

但不知道应该怎么做,就是一个迭代器的运用。
 
VS2012无法编译,求大神解释啊。

以下是完整代码,WIN32 console Application.

错误提示:error C2679: 二进制“<<”: 没有找到接受“MyLink<T>::Unit”类型的右操作数的运算符(或没有可接受的转换)
但事实上,我有重载的操作符的,代码如下,大家帮我看看,谢谢。

C/C++ code
#include <iostream> using namespace std;  template <class T> class MyLink { public:     struct Unit        //链表单元     {         T value;         Unit* next;     };     class LinkIterator     {         Unit* init;     public:         LinkIterator(Unit *init)         {             this->init = init;         }         bool operator != (LinkIterator& it)         {             return this->init != it.init;         }         void operator ++(int)         {             init = init->next;         }         Unit operator* ()         {             return* init;         }     };     Unit *head;    //链表头     Unit *tail;    //链表尾     Unit *prev; public:     MyLink()     {         head = tail = prev = NULL;     }     void Add(T &value)//向链表中添加元素     {         Unit* u = new Unit();         u->value = value;         u->next = NULL;         if(head == NULL)         {             head = u;             prev = u;             }         else         {             prev->next = u;             prev = u;         }         tail = u->next;     }     Unit *Begin()     {         return head;     }     Unit *End()     {         return tail;     }     virtual ~MyLink()     {         if(head != NULL)         {             Unit *prev = head;             Unit *next = NULL;             while(prev != tail)             {                 next = prev->next;                 delete prev;                 prev = next;             }         }     } };  template<class Init> void Display(Init start, Init end) {     cout<<endl;     for(Init mid=start;mid!=end;mid++)     {         cout<<*mid<<"\t";     }     cout<<endl; }  template<class T> ostream& operator << (ostream& os,MyLink<T>::Unit& us) {     os<<us.value;     return os; }  void main() {     int m=0;     MyLink<int>ml;     for(int i=0;i<5;i++)     {         m=i+1;         ml.Add(m);     }     MyLink<int>::LinkIterator start2=ml.Begin();     MyLink<int>::LinkIterator end2=ml.End();     Display(start2,end2);     getchar(); }


[解决办法]
错误1: Unit 是你自己定义的类型,定义的时候需要用typename说明是一种类型,
[code=C/C++][/code]template<class T>
ostream& operator<< (ostream& os,typename MyLink<T>::Unit& us)