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)
