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

lclvcstudy lclvcstudy 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的代码是这样的:
这是类模板声明和定义在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;编译不过去?
百思不得其解,高手指点!
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部
lclvcstudy
C++ 语言 65,214 成员 250,514 内容