C++ 使用friend函数时出现不完整类型
为什么它说的是不完整类型,为什么我不能像这样使用friend函数C++ 使用friend函数时出现不完整类型,c++,friend-function,C++,Friend Function,为什么它说的是不完整类型,为什么我不能像这样使用friend函数 #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;
#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);
}
#包括
使用名称空间std;
课堂测试;
类test2{
公众:
无效输出(测试t)
{
cout声明类test
后,必须定义方法test2::outd
:
#include<iostream>
using namespace std;
class test;
class test2{
public:
void outd(test t);
};
#包括
使用名称空间std;
课堂测试;
类test2{
公众:
脱空(试验t);
};
编辑
(回应评论)
这称为远期申报
以下形式的声明
类密钥属性标识符
声明稍后将在此范围中定义的类类型。在定义出现之前,此类名的类型不完整。这允许相互引用的类以及指定给该类的类型为不完整类。在声明类测试后,必须定义方法test2::outd
:
#include<iostream>
using namespace std;
class test;
class test2{
public:
void outd(test t);
};
#包括
使用名称空间std;
课堂测试;
类test2{
公众:
脱空(试验t);
};
编辑
(回应评论)
这称为远期申报
以下形式的声明
类密钥属性标识符
声明稍后将在此范围中定义的类类型。在定义出现之前,此类名的类型不完整。这允许相互引用的类以及指定给该类的类型为不完整类。请确保除非编译人员看到完整声明,否则无法使用测试中的任何成员变量当然,除非代码完全被编译器看到,否则不能使用任何成员变量。除非是完整的声明。是的!谢谢!但是我可以知道为什么这个工作吗?@ CurristyJyver历史上,C和C++编译器按顺序处理源文件,所以要求是按顺序出现的。通常是很好的。除非您有循环依赖项(如本例中所示)在某些情况下,在C++中,这不适用。例如,即使它们还没有被声明,类也可以引用他们自己的成员和方法。是的,它工作!!非常感谢,但是我可以知道为什么这个工作吗?@ CurristyJyver历史上,C和C++编译器按顺序工作通过源文件,所以要求是TH。除非出现循环依赖关系(如本例中),否则,通常情况下是良好的。在某些情况下,C++不适用。例如,即使它们还没有被声明,类也可以引用自己的成员和方法。