| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 712 人关注过本帖
标题:vs2005中友元函数的问题
只看楼主 加入收藏
wghost
Rank: 2
等 级:论坛游民
帖 子:47
专家分:31
注 册:2009-6-6
结帖率:37.5%
收藏
已结贴  问题点数:10 回复次数:2 
vs2005中友元函数的问题
#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。
搜索更多相关主题的帖子: 函数 
2010-06-05 10:52
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:5 
程序代码:
#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;
 }
友元函数不属于类成员,模板函数的友元声明模板在使用之前必须先声明。模板的使用由友元声明构成,不是由模板的声明构成。实际的模板声明必须在友元声明之前。
2010-06-05 12:54
gaoce227
Rank: 4
来 自:山东
等 级:业余侠客
帖 子:134
专家分:218
注 册:2008-4-5
收藏
得分:5 
楼上说的对,不能直接在外面定义。而应该加上template<class T>.

[ 本帖最后由 gaoce227 于 2010-6-5 15:18 编辑 ]
2010-06-05 15:06
快速回复:vs2005中友元函数的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035625 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved