使用好友功能时出现不完整的类型

时间:2018-10-21 11:53:50

标签: c++ friend-function

为什么说不完整的类型,为什么我不能使用像这样的朋友功能?

#include<iostream>
using namespace std;
class test;
class test2{
    public:
    void outd(test t)
    {
        cout <<t.x<<endl;
        cout<<t.y<<endl;
    }
}; 
class test{

  int x;  
    int y;
    friend void test2::outd(test t);
public:
    test(int x,int y)
    {
        this->x=x;
        this->y=y;
    }

};



int main()
{
    test t(1,2);
    test2 z;
    z.outd(t);
}

错误: prog.cpp:在成员函数'void test2 :: outd(test)':

prog.cpp:6:20:错误:“ t”的类型不完整

void outd(test t)

prog.cpp:3:7:注意:“类测试”的前向声明

类测试;

1 个答案:

答案 0 :(得分:2)

必须在声明类test2::outd之后定义方法test

#include<iostream>
using namespace std;
class test;
class test2{
  public:
  void outd(test t);
};

修改 (对此发表评论) 这称为转发声明

以下形式的声明 class-key attr标识符;

声明一个类类型,它将在此范围的后面定义。在定义出现之前,该类名称的类型不完整。这样可以允许类之间相互引用,并且提供给该类的类型是不完整的类。