为什么说不完整的类型,为什么我不能使用像这样的朋友功能?
#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:注意:“类测试”的前向声明
类测试;
答案 0 :(得分:2)
必须在声明类test2::outd
之后定义方法test
:
#include<iostream>
using namespace std;
class test;
class test2{
public:
void outd(test t);
};
修改 (对此发表评论) 这称为转发声明
以下形式的声明 class-key attr标识符;
声明一个类类型,它将在此范围的后面定义。在定义出现之前,该类名称的类型不完整。这样可以允许类之间相互引用,并且提供给该类的类型是不完整的类。