none
VS2012 C++无法编译 VC6.0正常 RRS feed

  • 问题

  • 又一次遇到了,这个问题。

    但不知道应该怎么做,就是一个迭代器的运用。

    VS2012无法编译,求大神解释啊。

    #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,typename 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();
     }

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

    2012年9月8日 11:44

全部回复

  • 显示什么错误?

    麻烦把正确答案设为解答。

    2012年9月10日 2:32
    版主
  •    你是说找不到编译按钮还是别的

    雷神

    2012年9月14日 4:40
  • 错误 1 error C2679: 二进制“<<”: 没有找到接受“MyLink<T>::Unit”类型的右操作数的运算符(或没有可接受的转换)

    可事实是,上面已重载了"<<"操作符的。

    在VC6.0编译无问题,VS2012提示以上信息。

    上面是完整代码,可直接建一个WIN32 console Application.复制进去,便可编译。

    麻烦帮我看看,是什么原因。

    2012年9月15日 2:32
  • 是编译出现错误:

    错误 1  error C2679: 二进制“<<”: 没有找到接受“MyLink<T>::Unit”类型的右操作数的运算符(或没有可接受的转换)

    可事实是,上面已重载了"<<"操作符的。

    在VC6.0编译无问题,VS2012提示以上信息。

    上面是完整代码,可直接建一个WIN32 console Application.复制进去,便可编译。

    麻烦帮我看看,是什么原因。

    2012年9月15日 2:33
  • cout<<*mid<<"\t"; //这个错误吧

    您上面的并没有重载<<操作符的代码。


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年9月15日 2:53
    版主