看看这个关于模板友元问题是不是很有难度!
我的代码是这样的:
这是类模板声明和定义在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;编译不过去?
百思不得其解,高手指点!