C++在类模板中实现友元函数的方法
来源:互联网 发布:mac 如何使用mysql 编辑:程序博客网 时间:2024/04/30 04:51
在类模板中重载了运算符,并把该函数声明为友元函数.如果在类体外定义该友元函数(外部函数),则出现如下编译错误:
main.obj : error LNK2019: 无法解析的外部符号"class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class SeqList<int> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$SeqList@H@@@Z), 该符号在函数 _main 中被引用
和
fatal error LNK1120: 1 个无法解析的外部命令
这是一个链接期错误,原因是重载外部运算符函数没有在声明为友元时显式声明其模板参数列表
实际上,如果定义类似
template<typename T>void show(Pig<T>& _pg)
{
_pg.x = 8;//修改Pig类的私有成员
cout << "Pig的成员: " << _pg.x << endl; //参阅Pig类的私有成员!
}
的模板函数,要将其定义为友元函数,应该使用的不是
friend void show(Pig<T>& _pg);
而是
friend void show<T>(Pig<T>& _pg);
或
template<typenameT>
friend void show(Pig<T>& _pg);
,因为show()不是函数的id,show<T>()才是函数的id,所以一定要在定义友元函数时显式声明模板参数表
- C++在类模板中实现友元函数的方法
- 在 C 语言中实现模板函数的方法
- 在 C 语言中实现模板函数的方法
- 【转】在C语言中实现模板函数的方法
- 在 C 语言中实现模板函数的方法
- 在类模板中使用友元函数的问题
- 关于函数模板在类模板中声明为友元的一些心得
- 在复数类模板中使用友元函数实现复数相加
- 在 C 语言中实现模板函数的方法(续)
- 模板类的友元模板函数
- 模板类的 友元模板函数
- 在c语言中实现函数模板的例子
- 类模板中使用友元函数
- 模板类中使用友元函数
- 怎样在模板中增加友元函数
- C++中模板类使用友元模板函数
- C++中模板类使用友元模板函数
- C++中模板类使用友元模板函数
- CDQ分治学习
- Eclipse - Color Theme plugin
- Android系统开发(3)——Makefile的编写
- 话题13 --鞭辟入里 条件表达式的类型深入
- swjtu行政自动挂机工具
- C++在类模板中实现友元函数的方法
- 黑客攻击的一般过程
- C#操作word文档
- Jedis分片连接池(分布式)
- Maven构建一个多模块的Spring Boot + Spring MVC项目,完全基于java config
- JTAG各类接口针脚定义及含义
- canopen主站卡定义丨canopen主站卡特性
- IOS---加急审核
- iOS判断设备型号