类内声明

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()即可

(三)使用过渡函数

自定义类模板 重载<<遇到的问题的更多相关文章

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

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

  2. VS2015如何自定义类模板、我的模板——原来这么简单!

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

  3. Intellij IDEA自定义类模板和方法模板

    以Intellij IDEA 2017.3.5为例 定义类模板 依次打开File->Settings->File and Code Templates->Files, 选择class ...

  4. VS自定义模板-以自定义类模板为样例

    前言 在实际的工作过程中部分公司会要求开发人员在开发过程中需遵守一些开发规范,开发规范中主要包括文件的注释规范,项目.文件.变量的命名规范(例如驼峰规范)等等.例如我们代码规范中就有一项新增文件的文件 ...

  5. [Visual Studio] 自定义类模板

    1.找到vs2015/vs2012/vs2017的安装目录下:Common7\IDE\ItemTemplates\CSharp\Code\2052\Class 2.打开Class.cs文件 using ...

  6. vs自定义类模板

    .找到VS安装目录,我的目录是:C:Program Files (x86)Microsoft Visual Studio 12.0 .在C:Program Files (x86)Microsoft V ...

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

    模板参数自动推导 在C++17之前,类模板构造器的模板参数是不能像函数模板的模板参数那样被自动推导的,比如我们无法写 std::pair a{1, "a"s}; // C++17 ...

  8. C++基础 (9) 第九天 编译器对模板类的二次编译 类模板 自定义数组类

    1 昨日回顾 2 编译器对于模板的二次编译 写一个模板函数 然后进行调用 g++ template.cpp -o template // 汇编 g++ -S template.cpp –o templ ...

  9. Xcode6中如何使用自定义的类模板

    说到IOS类的模板,有些人感觉很陌生,但是只要有开发过IOS程序的人,其实都用过类的模板,只不过是用的系统自带的类的模板. 例如创建一个ClassTemplateVC继承于UIViewControll ...

随机推荐

  1. HW2.8

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  2. vmware 8下ubuntu 13.04安装vmware tools

    在虚拟机vmware 8.0里安装了ubuntu 13.04.为了方便与主机交互,安装vmware tools. 解压后直接运行 ./vmware-install.pl 一路默认路径安装下来,到&qu ...

  3. C# WinForm修改Panel边框颜色

    private void panel1_Paint(object sender, PaintEventArgs e) { ControlPaint.DrawBorder(e.Graphics, thi ...

  4. VC++深入详解-第一章学习心得(一)

    句柄是系统为资源分配内存的标识号. 相当于一个指针指向一块内存空间,我暂时理解成一个地址,一个门牌号 HWND 窗口句柄 HICON 图标句柄 HCURSOR 光标句柄 HBRUSH 画刷句柄 消息的 ...

  5. AS3 IOC框架Spring Actionscript 的使用总结

    Spring Actionscript 是众多围绕依赖注入提供解决方案的Flex控制反转框架之一 AS3 下经典的IOC框架有Spring ActionScript.Parsley.Flicc和Swi ...

  6. [二]poi实践一

    1.创建时间格式的cell 2.创建不同格式的cell(字符串.布尔.数值) 3.读取遍历xls文件 4.抽取excel的内容

  7. 国外一些好用的UX/UI设计工具和资源分享

    国外一些好用的UX/UI设计工具和资源分享 你今天使用的设计工具也许不再适合以后的网页和APP设计项目了.新的工具不断的推出市场,目标只有一个,让你的工作更快.更容易而且工作成效更好.今天分享的这些U ...

  8. spring boot配置写法

    转自:http://blog.csdn.net/mickjoust/article/details/51646658 每日金句 你要搞清楚自己人生的剧本:不是你父母的续集,不是你子女的前传,更不是你朋 ...

  9. ios 添加到cell 上的button点击无效!扩大button的点击区域(黑魔法)

    一般情况下点击效果都是正常的!要不然你对它做了什么?一般细心的小伙伴都没有遇到这种情况,但是呢! 当然我是二班的!在这里我主要讲两个问题,解决问题和普及魔法. 一.普及问题(button在cell上点 ...

  10. Bootstrap-下拉框 Combobox

    Bootstrap下拉框 Combobox显示效果如下: 源代码: <select class="combobox"> <option></optio ...