首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

急 用友元 和 操作符重载时 碰到的有关问题,万般无奈

2012-04-19 
急!! 用友元 和 操作符重载时 碰到的问题,万般无奈代码如下:头文件:templateclass Tclass Iterator{List

急!! 用友元 和 操作符重载时 碰到的问题,万般无奈
代码如下:

头文件:

template<class T>
class Iterator
{
  ListNode<T>* cur;
public:
  Iterator():cur(NULL){};
  Iterator(ListNode<T>* point):cur(point){};


  friend T operator ++(Iterator<T>& it);
  friend T operator ++(Iterator<T>&it,int);
  friend bool operator ==(Iterator<T> & it, ListNode<T>* point);
  friend bool operator !=(Iterator<T>& it,ListNode<T>* point);
  friend std:stream& operator<<(std:stream& stream, Iterator<T>& it);
  void operator =(ListNode<T>* point);
  ListNode<T>*& GetCur();
};

template<class T>
T operator ++(Iterator<T>& it)

{
  it.GetCur() = it.GetCur()->GetLink();
  T data;
  data = it.GetCur()->GetData();
  return data;
}


template<class T>
T operator++(Iterator<T>& it,int x)
{
  T data;
  data = it.GetCur()->GetData();
  it.GetCur() = it.GetCur()->GetLink();
  return data;
}

template<class T>
bool operator ==(Iterator<T>& it, ListNode<T>* point)
{
  return it.GetCur() == point;
}

template<class T>
bool operator!=(Iterator<T>& it, ListNode<T>* point)
{
  return it.GetCur()!= point;
}

template<class T>
std:stream& operator<<(std:stream& stream,Iterator<T> & it)
{
  stream<<it.GetCur()->GetData();
  return stream;
}


template<class T>
void Iterator<T>:perator=(ListNode<T>* point)
{
  cur = point;
}

template<class T>
ListNode<T>*& Iterator<T>::GetCur()
{return cur;
}



main函数实现部分:

Iterator<int> a;
a = ListFirst.GetHead();
while(a!=ListFirst.GetTail())
{
  ++a;
  cout<<a;
}




最后编译后报错:


错误 3 error LNK2019: 无法解析的外部符号 "int __cdecl operator++(class Iterator<int> &)" (??E@YAHAAV?$Iterator@H@@@Z),该符号在函数 _main 中被引用 d:\documents\visual studio 2010\Projects\test\test\test.obj

错误 2 error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Iterator<int> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$Iterator@H@@@Z),该符号在函数 _main 中被引用 d:\documents\visual studio 2010\Projects\test\test\test.obj

错误 5 error LNK1120: 3 个无法解析的外部命令 d:\documents\visual studio 2010\Projects\test\Debug\test.exe 1

[解决办法]

探讨
引用:

template<class S>friend T operator ++(Iterator<S>&amp;amp; it);

其他的友元函数都这么改就OK了


请问能解释下原因吗? 是因为T重复使用吗?

热点排行