注册 登录
编程论坛 C++教室

vs2005中友元函数的问题

wghost 发布于 2010-06-05 10:52, 712 次点击
#include<iostream>
template <class T>
class test
{
    friend std::ostream & operator <<(std::ostream &out,test& t)
        {
    out<<t.x<<t.y;
    return out;
}
public:
    T x,y;

};
在这个程序里,如果把友元函数在类外定义就会出现连接错误,谁能解释一下??我用的是vs2005。
2 回复
#2
lijm19892010-06-05 12:54
程序代码:
#include<iostream>
using namespace std;
template <class T>
class test
{
    friend ostream &operator << <T>(ostream &out,test<T>& t);
public:
    T x,y;

};
template <class T>
ostream & operator << (ostream &out,test<T>& t)

 {
    out<<t.x<<t.y;
    return out;

 }

程序代码:
#include<iostream>
using namespace std;
template <class T>
class test
{
    template <class U>
    friend ostream &operator << (ostream &out,test<U>& t);
public:
    T x,y;

};
template <class T>
ostream & operator << (ostream &out,test<T>& t)

 {
    out<<t.x<<t.y;
    return out;

 }
  
#include<iostream>
using namespace std;
template <class T>
class test
{
    friend ostream &operator << (ostream &out,test<T>& t);
public:
    T x,y;

};
template <class T>
ostream & operator << (ostream &out,test<T>& t)
 {
    out<<t.x<<t.y;
    return out;
 }
友元函数不属于类成员,模板函数的友元声明模板在使用之前必须先声明。模板的使用由友元声明构成,不是由模板的声明构成。实际的模板声明必须在友元声明之前。
#3
gaoce2272010-06-05 15:06
楼上说的对,不能直接在外面定义。而应该加上template<class T>.

[ 本帖最后由 gaoce227 于 2010-6-5 15:18 编辑 ]
1