类模板友元函数的声明(友元函数可以在类内定义吗)

2009-08-09摘自《SunStudio12:C++用户指南》第6.7.3节 模板在使用前必须先声明。一个友元声明构成了模板的使用,而非模板的声明。(Afrienddeclarationconstitutesauseofthetemplate,notadeclarationofthetemplate.)所以实际的模板声明必须在友元声明之前

大家好,又见面了,我是你们的朋友全栈君。

2009-08-09

摘自《Sun Studio 12: C++ 用户指南》 第 6.7.3 节

 

模板在使用前必须先声明。一个友元声明构成了模板的使用,而非模板的声明。(A friend declaration constitutes a use of the template, not a declaration of the template. )所以实际的模板声明必须在友元声明之前。例如,编译系统尝试链接以下示例中生成的目标文件时,对未实例化的operator<<函数,会生成一个未定义的错误

 

示例6–2 友元声明问题的示例

 

请注意,因为编译器将以下代码作为普通函数(array类的friend)的声明进行读取(because the compiler reads the following as the declaration of a normal function that is a friend of the array class),所以编译期间不会出现错误消息

因为operator<<实际上是模板函数,所以需要在声明template class array之前提供此“模板函数”(operator<<?)的声明。但是,由于operator<<有一个type为array<T>的形参(模板类型形参?),因此在声明函数之前,必须声明array<T>。文件array.h必须如下所示:

Because operator<< is really a template function, you need to supply a template declaration for prior to the declaration of template class array. However, because operator<< has a parameter of type array<T>, you must precede the function declaration with a declaration of array<T>. The file array.h must look like this:

 

 //———————————————————————————–

换一个能通过的版本,所有代码都放到同一个文件中。前面那个未通过乃是因为文件之间include有问题,在array.cc中#include “array.h”,然后在main.cc中#include “array.cc”即可。

//———————————————————————————— 

再换一个所有代码合在一起的版本,使用了using namespace std;

主要是验证下面这段代码的第七行

“template<class T> ostream& operator<<(ostream&, const array<T>&);”

可以被删掉!

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127793.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm打开全部变成乱码_pycharm控制台输出中文乱码

    pycharm打开全部变成乱码_pycharm控制台输出中文乱码如上图所示:PyCharm默认打开时,pythonconsole中如果用到windows下cmd里的命令时,会输出乱码,原因:cmd默认的编码是gbk(代码页:936),而pythonconsole里面的编码是utf-8(代码页:65001),由于编码不一致,所以输出时会出现乱码解决办法:如下:1、File-Setting-Search-console-pythonconsol

  • fiddler手机抓包 443「建议收藏」

    fiddler手机抓包 443「建议收藏」安装证书常规设置之后仍然抓不到包:https://blog.csdn.net/lx_zsdong/article/details/82257698

  • kindeditor php配置,KindEditor-编辑器配置参数属性 | 小灰灰博客

    kindeditor php配置,KindEditor-编辑器配置参数属性 | 小灰灰博客在《开发php接入富文本编辑器KindEditor》中提到了KindEditor编辑器的使用方法,通过使用KE.show(config)方法即可将编辑器添加到文档中。·无论使用哪种方式使用KindEditor编辑器,都必须进行参数配置;·可以在KE.show()和KE.init()方法中传递配置参数config;·配置参数config是一个对象,一般使用字面量对象;·其中,id参数是唯一必须进行配…

    2022年10月12日
  • 约瑟夫环 OJ

    约瑟夫环 OJ循环链表的应用,并且应为不带头节点的循环链表,首先创建一个循环链表,在函数JOHEPHUS中进行操作,主要就是用for找到要删除的元素(注意p==1单独考虑,for中p至少为2),删除元素并输出直至链表为空。for(j=1;j&lt;=p-1;j++)把寻找报数的位置和寻找要删除的节点的前驱结合在一个循环中,减少时间复杂度,因为第一次写我是在主函数中用r指向找到的要删除的节点,然后传入de…

  • 数据库设计工具的使用(实用)

    数据库设计工具的使用(实用)使用数据库设计工具,以下sql语句全部可以自动生成:/*==============================================================*//*DBMSname:MySQL5.0*//*Createdon:2017/5/270:57:18

  • 如何激活成功教程汽车–CAN协议

    如何激活成功教程汽车–CAN协议如何激活成功教程汽车–CAN协议1介绍2激活成功教程流程(以转速表为例)引自[2]一辆车就是一个网络连接到网络工具硬件软件CANbus激活成功教程CAN协议设置识别重播模糊测试可能的问题参考1介绍汽车后装的辅助驾驶设备,一般需要知道汽车的CAN协议,各汽车厂家的CAN协议又是保密的,这时就需要激活成功教程,因为CAN协议是明文,所以激活成功教程也就轻松些。2激活成功教程流程(以转速表为例)引自[2]一辆车就是一个网络一辆汽车由多台计算机组成,以控制发动机、变速器、窗户、锁、灯等。这些计算机被称为电子控制单元(ECU),它们通过网

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号