爱吃爆米花的猫咪 2022-05-18 23:20 采纳率: 0%
浏览 290

一直报这个错,error: invalid use of incomplete type 'class X',为什么啊,我把X写在前面Y又不对了,就是一直有问题,请大家看看我应该怎么改

#include
using namespace std;
class X;
class Y
{
public:
void g(X *p)
{
p->i+=1;
}
};
class Z
{
public:
void f(X *p)
{
p->i+=5;
}
};
class X
{
int i;
public:
X(int ii)
{
i=ii;
}
friend class Z;
friend void Y::g(X *p);
friend void h(X *p)
{
p->i+=10;
}
void show(){cout<<"i="<<i<<endl;}
};
int main()
{
X x(1);
Y y;
Z z;
h(&x);
x.show();
y.g(&x);
x.show();
z.f(&x);
x.show();
return 0;

}

  • 写回答

1条回答 默认 最新

  • 张十五 2022-05-19 13:55
    关注
    
    using namespace std;
    class X;
    class Y
    {
    public:
        void g(X* p);
    };
    
    class X
    {
        int i;
    public:
        X(int ii)
        {
            i = ii;
        }
        friend class Z;
        friend void Y::g(X* p);
        friend void h(X* p)
        {
            p->i += 10;
        }
        void show() { cout << "i=" << i << endl; }
    };
    
    void Y::g(X* p)
    {
        p->i += 1;
    }
    
    class Z
    {
    public:
        void f(X* p)
        {
            p->i += 5;
        }
    };
    
    int main()
    {
        X x(1);
        Y y;
        Z z;
        h(&x);
        x.show();
        y.g(&x);
        x.show();
        z.f(&x);
        x.show();
        return 0;
    
    }
    
        当用到友元成员函数时,需注意友元声明和友元定义之间的相互依赖,类Y必须先定义,否则类X就不能将一个Y的函数指定为友元。然而,只有在定义了类X之后,才能定义类Y的该成员函数。更一般的讲,必须先定义包含成员函数的类,才能将成员函数设为友元。另一方面,不必预先声明类和非成员函数来将它们设为友元。
    
    评论

报告相同问题?

问题事件

  • 创建了问题 5月18日

悬赏问题

  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘
  • ¥15 抖音直播广场scheme