类内声明

friend ostream& operator<<(ostream& os,const store<T> &item);

类外实现

template <typename T>

ostream& operator<<(ostream &os,const store<T> &item)

{

os << item.value;

return os;

}

使用

http://i.cnblogs.com/EditPosts.aspx?postid=3606394store<int> a(5);

cout << a << endl;

编译出现错误:

undefine reference to 'opeartor<<(std::basic_ostream<char,std::char_traits<char> >&,store<int> const&)'

网上大部分的解决思路是GCC编译时通知链接器链接静态库libstdc++,或者直接用g++编译,可是我本身就用的g++编译的啊

通过http://www.cnblogs.com/xkfz007/articles/2534322.html,找到解决方案

在类模板中重载输入和输出操作符,若是用友元在类内声明,在类外实现,链接时将会报错,可以采用以下三种方式实现输入输出操作符重载:

(一)

直接在类内实现

如果在类外实现,

template<typename T>

ostream& operator<<(ostream& os,store<T> &item)

{

os << item.value;

return os;

}

正好是函数模板的定义,因为重载操作符<<函数不是类的成员函数,所以这里相当与定义了新的函数模板,就不同与类中的声明(friend ostream& operator<<(ostream&,const store<T>&))。但是去掉template <typename T>,函数参数表中的T将不知类型,这个矛盾决定不能类内声明,类外实现

(二)

类外实现相当与定义了一个函数模板,则它不使用类的私有成员即可。通过类的公有成员实现对类的私有成员的操作。因此可以不再类内声明为友元,直接在类外实现重载

由于访问了私有成员value,可以为类实现一个public函数getValue,类外使用  os << item.getValue()即可

(三)使用过渡函数

转载于:https://www.cnblogs.com/buptlyn/p/3606394.html

自定义类模板 重载遇到的问题相关推荐

  1. 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

     1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...

  2. Jetbrains Rider自定义类模板

    Rider自定义类模板,添加文件创建时间等... 1. 打开 文件–>设置–>编辑器–>File Templates.如下图: 2. 在下面的模板代码前面中添加下面的内容: #reg ...

  3. VS2015自定义类模板的方法

    在前一段时间忽然想给自己电脑上的vs新建类的时候添加一个自定义个注释,但是在网上搜了很久都是说vs2012之类的方法系统也都是win7.XP之类的独独没有win8的.故此自己不断的尝试修改发现方法如下 ...

  4. 类模板 重载运算符 易错

    在类模板中定义重载运算符模板函数,易错地方如下 例 错误(1) #include <iostream> using namespace std; template <typename ...

  5. 在python中定义类时、运算符重载_python自定义类运算符重载

    假设我有一个班级: class Cat: def __init__(self, name = "default", age = 0): self.name = name self. ...

  6. C++17尝鲜:类模板中的模板参数自动推导

    目录 模板参数自动推导 示例 自定义类模板中的应用 Automatic deduction guides(自动推断向导) 模板参数自动推导 在C++17之前,类模板构造器的模板参数是不能像函数模板的模 ...

  7. 笔记②:牛客校招冲刺集训营---C++工程师(面向对象(友元、运算符重载、继承、多态) -- 内存管理 -- 名称空间、模板(类模板/函数模板) -- STL)

    0618 C++工程师 第5章 高频考点与真题精讲 5.1 指针 & 5.2 函数 5.3 面向对象(和5.4.5.5共三次直播课) 5.3.1 - 5.3.11 5.3.12-14 友元 友 ...

  8. 用类模板实现容器存储自定义数据类型(类似于STL里面的vector)

    上一节里面已经提到了,用类模板存储自定义的数据类型,如Teacher类型时,需要重载Teacher类的拷贝构造函数,"="操作符,"<<"操作符,特 ...

  9. c++模板 --- 类模板、自定义类型当做模板参数

    生成一个类模板 类中用到了未知类型叫做类模板 用 template 修饰的类,这个类就是一个模板类 多用在数据结构中,忽略类型的问题 只要被 template 修饰,就是一个模板类,有没有用未知类型都 ...

最新文章

  1. 太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!
  2. Fishe向量Fisher Vecotr(二)
  3. 在ubuntu系统中删除软件的三种最佳方法
  4. Laravel-admin 分类避免踩坑
  5. matlab中函数绝对值图像,ex的图像(绝对值的函数图像口诀)
  6. OpenStack Cinder发展动态系列--Austin峰会
  7. udp程序启动后检测都是未启动_【例子教程】联想Leez P710 物联网AI物体检测
  8. Java学习之JavaWeb篇
  9. 工厂模式的三张类图(一目了然)
  10. JavaScript运算符运算优先级
  11. C# 字符串转JSON格式
  12. 转载 The database could not be exclusively locked to perform the operation(SQL Server 5030错误解决办法)...
  13. 计算机组成部件及其作用,计算机硬件组成成分各自的功能 计算机硬件有哪几部分组成?请分别说明各部分的作用?...
  14. 高解析APNG(动画PNG). 2D. 3D APNG's的动态图
  15. QT 程序运行异常问题总结
  16. MIPI DSI协议
  17. 表情符号存入mysql_emoji等表情符号存mysql的方法
  18. 发挥搜索引擎和工具书的大作用
  19. 教师资格证网站内部服务器错误,教师资格证报名入口_教师资格证ntce_教师资格证报名入口进不去咋办?...
  20. USB HUB芯片 FE8.1替代方案

热门文章

  1. SpringSide 3 中的 Struts 2
  2. python线程池模块_Python并发编程之线程池/进程池--concurrent.futures模块
  3. UVA11464偶数矩阵
  4. C语言经典例20-小球反弹高度问题
  5. 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 )
  6. 【错误记录】Android 分区存储 错误 ( 文件格式不匹配 )
  7. 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )
  8. 【约束布局】ConstraintLayout 约束布局 ( 简介 | 引入依赖 | 基本操作 | 垂直定位约束 | 角度定位约束 | 基线约束 )
  9. 你见过的最全面的python重点
  10. 判断条件为空时需要注意