自定义类模板 重载遇到的问题
类内声明
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.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...
- Jetbrains Rider自定义类模板
Rider自定义类模板,添加文件创建时间等... 1. 打开 文件–>设置–>编辑器–>File Templates.如下图: 2. 在下面的模板代码前面中添加下面的内容: #reg ...
- VS2015自定义类模板的方法
在前一段时间忽然想给自己电脑上的vs新建类的时候添加一个自定义个注释,但是在网上搜了很久都是说vs2012之类的方法系统也都是win7.XP之类的独独没有win8的.故此自己不断的尝试修改发现方法如下 ...
- 类模板 重载运算符 易错
在类模板中定义重载运算符模板函数,易错地方如下 例 错误(1) #include <iostream> using namespace std; template <typename ...
- 在python中定义类时、运算符重载_python自定义类运算符重载
假设我有一个班级: class Cat: def __init__(self, name = "default", age = 0): self.name = name self. ...
- C++17尝鲜:类模板中的模板参数自动推导
目录 模板参数自动推导 示例 自定义类模板中的应用 Automatic deduction guides(自动推断向导) 模板参数自动推导 在C++17之前,类模板构造器的模板参数是不能像函数模板的模 ...
- 笔记②:牛客校招冲刺集训营---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 友元 友 ...
- 用类模板实现容器存储自定义数据类型(类似于STL里面的vector)
上一节里面已经提到了,用类模板存储自定义的数据类型,如Teacher类型时,需要重载Teacher类的拷贝构造函数,"="操作符,"<<"操作符,特 ...
- c++模板 --- 类模板、自定义类型当做模板参数
生成一个类模板 类中用到了未知类型叫做类模板 用 template 修饰的类,这个类就是一个模板类 多用在数据结构中,忽略类型的问题 只要被 template 修饰,就是一个模板类,有没有用未知类型都 ...
最新文章
- 太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!
- Fishe向量Fisher Vecotr(二)
- 在ubuntu系统中删除软件的三种最佳方法
- Laravel-admin 分类避免踩坑
- matlab中函数绝对值图像,ex的图像(绝对值的函数图像口诀)
- OpenStack Cinder发展动态系列--Austin峰会
- udp程序启动后检测都是未启动_【例子教程】联想Leez P710 物联网AI物体检测
- Java学习之JavaWeb篇
- 工厂模式的三张类图(一目了然)
- JavaScript运算符运算优先级
- C# 字符串转JSON格式
- 转载 The database could not be exclusively locked to perform the operation(SQL Server 5030错误解决办法)...
- 计算机组成部件及其作用,计算机硬件组成成分各自的功能 计算机硬件有哪几部分组成?请分别说明各部分的作用?...
- 高解析APNG(动画PNG). 2D. 3D APNG's的动态图
- QT 程序运行异常问题总结
- MIPI DSI协议
- 表情符号存入mysql_emoji等表情符号存mysql的方法
- 发挥搜索引擎和工具书的大作用
- 教师资格证网站内部服务器错误,教师资格证报名入口_教师资格证ntce_教师资格证报名入口进不去咋办?...
- USB HUB芯片 FE8.1替代方案
热门文章
- SpringSide 3 中的 Struts 2
- python线程池模块_Python并发编程之线程池/进程池--concurrent.futures模块
- UVA11464偶数矩阵
- C语言经典例20-小球反弹高度问题
- 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 )
- 【错误记录】Android 分区存储 错误 ( 文件格式不匹配 )
- 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )
- 【约束布局】ConstraintLayout 约束布局 ( 简介 | 引入依赖 | 基本操作 | 垂直定位约束 | 角度定位约束 | 基线约束 )
- 你见过的最全面的python重点
- 判断条件为空时需要注意