今天在写单向链表实现线性表的时候打算重载输出运算符用来将线性表输出,结果无奈又遇到了问题。

大致代码如下

<pre name="code" class="cpp">
template<class T>
class chainList : public linearList<T>
{friend ostream& operator<<(ostream & out, const chainList<T> & rhs);
public:......
private:......
};//友元函数实现的实现
template<class T>
ostream & operator<<(ostream & out, const chainList<T> & rhs)
{......
}

运行的时候编译器报错说 无法解析的外部符号

想来想去也只能使友元函数出了问题,于是果断百度了解了一下

友元函数虽然可以访问类内部的成员,但是它相对于类是独立的,它的实现不能依赖类。代码中用到模板类template<class T> 而在类内声明友元函数的时候也用到了<T>,所以此时友元函数是依赖于类的实现而实现的,编译器才会报错。

解决方法有两个

第一种:可以将友元函数的实现放在类的内部

第二种:在类的内部声明友元函数的时候在之前为它单独配一个模板类型,然后在外部实现

template<class T>
class chainList : public linearList<T>
{template<typename U>friend ostream& operator<<(ostream & out, const chainList<U> & rhs);
public:......
private:......
};//友元函数实现的实现
template<typename U>
ostream & operator<<(ostream & out, const chainList<U> & rhs)
{......
}

学习笔记-----C++模板类中友元函数重载输出运算符时提示无法解析的外部符号解决方案相关推荐

  1. 【C++】模板类的友元函数

    模板类友元函数 模板类的友元函数 参考:https://blog.csdn.net/dreamer_lhs/article/details/53580088 区分:友元是否为函数模板 非模板友元 约束 ...

  2. C++深度解析 类中的函数重载 -- 全局函数,普通成员函数,静态成员函数(28)

    C++深度解析 类中的函数重载 -- 全局函数,普通成员函数,静态成员函数(28) 函数重载的回顾 函数重载的本质为相互独立的不同函数 C++中通过函数名和函数参数确定函数调用 无法直接通过函数名得到 ...

  3. C++学习笔记 : friend类 和 friend函数

    类的friend函数(友元函数)在类的作用域外定义,却具有访问类的非public (以及public)成员的权限. 单独的函数.整个类或其他类的成员函数都可以被声明为另一个类的友元. friend 的 ...

  4. c++学习笔记之基础---类内声明函数后在类外定义的一种方法

    在C++的"类"中经常遇到这样的函数, 返回值类型名 类名::函数成员名(参数表){ 函数体.} 双冒号的作用 ::域名解析符!返回值类型名 类名::函数成员名(参数表) { 函数 ...

  5. 微擎学习笔记二--模板视图中标签的if和ifp

    ifp 当前用户是否有 控制器--方法 的权限 包括add edit del send view等 方法必带 ifpp 当前用户是否有 插件 的权限 ife 当前用户是否有 控制器--方法 的权限 编 ...

  6. c 语言友元函数重载,C++友元函数重载++和--运算符

    代码: #include #include using namespace std; class one{ public: one(int i); void print(); friend one o ...

  7. 模板类中使用友元函数的方式,派生类友元函数对基类的成员使用情况

    在一般友元函数的前面加上 template<typename T),注意在函数的声明和定义处都要加这个模板 例如: //模板类,长方体类 template <typename Elemen ...

  8. C++ 类模板中友元函数问题

    #pragma once #include<iostream> template<typename T> class TestFriendTemplate { public:/ ...

  9. java有没有友元函数_c++中友元函数理解与使用

    在学习c++这一块,关于友元函数和友元类,感觉还是不好理解,但是井下心来,理解,需要把我一下几点. 首先讲友元函数. (1)友元函数: 1)C++中引入友元函数,是为在该类中提供一个对外(除了他自己意 ...

最新文章

  1. JAVA 设计模式 模板方法模式
  2. 谁说技术男不适合养猫!90后程序员2天做出猫咪情绪识别软件
  3. 测序数据的处理方法及装置制造方法及图纸
  4. python 读写 csv
  5. python基础知识面试题-深入解答关于Python的11道基本面试题
  6. PHP的void mixed
  7. C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标
  8. java泛型解析(转)
  9. java 合并流_Java Stream 流实现合并操作示例
  10. java判断long 大于0,JAVA的一道习题:找出五个大于Long.MAX_VALUE的素数
  11. 如何高效的学习前端的网页设计?
  12. cocos2dx 制作单机麻将(四)
  13. js每隔5分钟执行一次ajax请求的实现方法
  14. 含泪整理最优质策略塔防游戏源代码素材,你想要的这里都有
  15. 《模式识别与机器学习》 简称 PRML 开源了
  16. 共模和差模电感电路分析方法及思路
  17. 自定义view画钟表
  18. 兖州计算机老师,兖州最美教师 | 风采展示(二)
  19. 云服务器代理平台安装教程
  20. 〖Docker指南②〗Docker常用命令汇总

热门文章

  1. C语言学习之求一个3×3的整型矩阵对角线元素之和
  2. linux调小根目录,Linux根目录分区大小调整教程
  3. 复位 stm32_分析一个关于STM32 芯片异常复位的经典案例!
  4. 2013年人人校园招聘笔试题
  5. [No000016D]把知识种进脑子:像读教材一样读书
  6. logback日志模板与详解
  7. C语言-------基础知识小结(1)。
  8. C++ sizeof总结
  9. Mybatis传入参数map,读取map原创
  10. [网络安全自学篇] 六十四.Windows安全缺陷利用之SMBv3服务远程代码执行(CVE-2020-0796)复现及防御机理