看看这个关于模板友元问题是不是很有难度!

lclvcstudy 2005-05-26 04:32:38
我的代码是这样的:
这是类模板声明和定义在classtemplate.h文件中:
template <class T=int,class M=float,double N>class myclassTemplate{
public:
myclassTemplate();
~myclassTemplate();
friend void add(int s);//所有实例的友元
friend M add(M e,M n); //某个实例类的友元
protected:
private:
};

template <class T,class M,double N> myclassTemplate<T,M,N>::myclassTemplate()
{
cout<<"constrcting function:const :"<<N<<endl;
}

template <class T,class M,double N> myclassTemplate<T,M,N>::~myclassTemplate()
{
cout<<"deconstructing function:"<<endl;
}

void add(int s)//所有实例的友元
{
std::cout<<"s:"<<s<<std::endl;
}

template <class T,class M,double N>
M add(M e,M n) //某个实例类的友元。
{
return(e+n);
}

下面是调用这两个友元函数:
#include<iostream>
#include "classtemplate.h"

using namespace std;

void main()
{
myclassTemplate<int,float,20.23> myclass;
add(2);
cout<<"add:"<<add(10.7,36.8)<<endl;
}
add(10.7,36.8)函数
输出的:46.7,为什么答案不对呢?
还有
void add(int s)//所有实例的友元
{
std::cout<<"s:"<<s<<std::endl;
}这个函数为什么用cout<<"s:"<<s<<endl;编译不过去?
百思不得其解,高手指点!
...全文
117 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilovevc 2005-05-27
  • 打赏
  • 举报
回复
double 好像不能作为模板参数.
lonelyforest 2005-05-27
  • 打赏
  • 举报
回复
所有实例的友元需要在前面显式的加上template<>,
lclvcstudy 2005-05-26
  • 打赏
  • 举报
回复
还有另外的std的问题?
lclvcstudy 2005-05-26
  • 打赏
  • 举报
回复
我明白你的意思了,就是用到哪一个模板参数就包含哪一个参数。那么这还还是我原来在类那里定义的那个模板参数<class M>吗?还是另外定义的,这中间是怎么实现的呢?非常感谢你的回答,不知道能不能继续回答我这个疑惑?!谢谢
lclvcstudy 2005-05-26
  • 打赏
  • 举报
回复
你的意思是两个模板参数T和M都必须要用到吗?可是我刚才试了一下,不行呀,大哥能不能给讲详细点啊?多谢了
july81 2005-05-26
  • 打赏
  • 举报
回复
template <class T,class M,double N>
M add(M e,M n) //某个实例类的友元。
{
return(e+n);
}
你就用到一个模板参数M。。。。。
cout<<"add:"<<add(10.7,36.8)<<endl;
~~~~~~模板参数不能解析
template <class M>
M add(M e,M n)
{
return (e+n);
}

cout<<"add:"<<add(10.7,36.8)<<endl;
lclvcstudy 2005-05-26
  • 打赏
  • 举报
回复
??????????????????????????
healer_kx 2005-05-26
  • 打赏
  • 举报
回复
多试验几次就出来了。。。

65,184

社区成员

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

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