| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 659 人关注过本帖
标题:关于友元函数的实现的菜鸟问题!
取消只看楼主 加入收藏
lycpp
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
关于友元函数的实现的菜鸟问题!
#include<iostream>
using namespace std;
class Y;
class Z;
class X
{
public:
    X(int a=0){i=a;}
    int geti(){return i;}
    friend Z;
    friend void Y::g(X*);
    friend void h(X*);
private:
    int i;
};
class Y
{
public:
    Y(int b=1){k=b;}
    void g(X*x1)
    {
        x1->i=x1->i+k;
    }
private:
    int k;
};
class Z
{
public:
    Z(int c=5){t=c;}
    void f(X*x2)
    {
        x2->i=x2->i+c;
    }
private:
    int c;
};
void h(X*x3)
{
    x3->i=x3->i+10;
}

关于这段代码vc6.0编译时提示有一个错误:error C2027: use of undefined type 'Y'
                                                      see declaration of 'Y'
请问如何修改?谢谢了!
搜索更多相关主题的帖子: 函数 
2010-07-28 14:07
lycpp
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-28
收藏
得分:0 
#include<iostream>
using namespace std;
class Z;
class X
{
public:
    X(int a=0){i=a;}
    int geti(){return i;}
    friend Z;
    friend void g(X*);
    friend void h(X*);
private:
    int i;
};
class Y
{
public:
    Y(int b=1){k=b;}
    void g(X*x1)
    {
        x1->i=x1->i+k;
    }
private:
    int k;
};
class Z
{
public:
    Z(int c=5){t=c;}
    void f(X*x2)
    {
        x2->i=x2->i+c;
    }
private:
    int c;
};
void h(X*x3)
{
    x3->i=x3->i+10;
}

如果我对g(X*)的申明做出修改,并取消了对Y的前向引用声明,那程序如上。
这样编译器还是会提示出错:error C2248: 'i' : cannot access private member declared in class 'X'
这又是怎么回事?如果一定要把Y声明为X的友元才能实现g(X*)应有的功能。那为什么我们教科书上有这样一段话:“友元函数不仅可以是一个普通函数,也可以是另外一个类的成员函数。友元成员函数的使用和一般友元函数的使用基本相同,只要通过相应的类或对象名来访问。”这如何才能实现?
2010-07-28 19:57
lycpp
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-28
收藏
得分:0 
真是太感谢了!
2010-07-29 12:17
快速回复:关于友元函数的实现的菜鸟问题!
数据加载中...
 
   



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

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