友元函数可不可以是一个模板函数的实例

Tiger-3D 2011-05-22 05:15:23
今天的程序里面将一个模板函数的实例声明为友元函数,编译报错:cannot access private member declared in class 'Object'
...全文
204 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger-3D 2011-05-22
  • 打赏
  • 举报
回复
实在是不好意思,我一遍一遍的检查才发现竟然把模板函数的声明和定义时函数名错写了一个字母的大小写,换来的却是对程序更加熟悉,呵呵。同时通过也知道了VC的缺点。谢谢大家了!
pathuang68 2011-05-22
  • 打赏
  • 举报
回复
肯定可以。

比如:

#include <iostream>
using namespace std;

template <typename T>
class A
{
private:
T a;
public:
A(T a)
{
this->a = a; // 此处假定a是内置的数据类型,否则要为T提供assign operator
}

template <typename T>
friend ostream& operator << (ostream&, const A<T>&);
};

template <typename T>
ostream& operator << (ostream& os, const A<T>& c)
{
os << c.a; // 这里不用endl
return os;
}

int main(int argc, char** argv)
{
A<int> a(1);
A<double> b(2.1);
cout << a << " " << b << endl;
return 0;
}


不过如前面几位提到的,如果要使用模板的话,最好不要使用VC6了,它对模板的支持比较糟糕。
yfk 2011-05-22
  • 打赏
  • 举报
回复
可以的
在类模板中可以出现三种友元声明
(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数。
(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权。
(3)只授予对类模板或函数模板的特定实例的访问权的友元声明

想要限制对特定实例化的友元关系时,必须在可以用友元声明之前声明类或函数
  • 打赏
  • 举报
回复
VC6不怎么支持模板,我用模板函数都报错!
Tiger-3D 2011-05-22
  • 打赏
  • 举报
回复
恩,用的VC6.0
ljt3969636 2011-05-22
  • 打赏
  • 举报
回复
可以的,上代码吧
KID_coder 2011-05-22
  • 打赏
  • 举报
回复
这里报不能access一个私有变量。。。。

LZ如果用vc6~
换高版本的测测

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧