今天在CDT下用C++模板碰到一个很古怪的问题,基本情况就是在模板类里定义了操作符友员函数,
但这种情况下编译器无法确定该函数是否在模板范围类. 样例代码如下:
- #include <iostream>
- using namespace std;
- template<class T>
- class LinearList {
- public:
- LinearList(int MaxListSize = 10);
- ~LinearList() {delete [] element;}
- LinearList<T>& Delete(int k, T& x);
- LinearList<T>& Insert(int k, const T& x);
- void Output(ostream& out) const;
- friend ostream& operator<< (ostream& os, const LinearList<T>& other);
- private:
- int length;
- int MaxSize;
- T *element;
- };
这里[]对该问题要详细的描述,提供了两个解决办法:
i) 在模板类定义之前声明friend函数,同时把<>添加到friend函数名称后,具体修改如下:
- template<class T> class LinearList; # 由于friend中要引用该模板类,故需在此提前声明
- template<class T>
- ostream& operator<< (ostream& os, const LinearList<T>& other);
- template<class T>
- class LinearList {
- ...
- friend ostream& operator<< <> (ostream& os, const LinearList<T>& other);
- };
ii) 在friend声明的地方加上实现,这个修改就比较简单:
- template<class T>
- class LinearList {
- public:
- friend ostream& operator<< (ostream& os, const LinearList<T>& other)
- {
- ...
- }
- };
阅读(1707) | 评论(0) | 转发(0) |