#include <stdio.h>
class B;
class A;
class A
{
int a;
friend int B::f();
};
class B
{
int b;
class A x;
public:
int f();
};
int B::f()
{
// ...
}
main()
{
class B b;
b.f();
}
ERRORS:不完整的类型的错误,使用朋友时起作用
a.cpp:9: error: invalid use of incomplete type ‘struct B’
a.cpp:2: error: forward declaration of ‘struct B’
的问题不能通过将B的定义中的前作为 B具有类型A.
的目的对于来解决这个例子使B的朋友类会做,但在 我的真实代码,我有更多的B成员函数(所以我需要替代解决方案)。
最后,有人可以给我一些链接,解释编译器在前向声明,声明和定义中所做的 。
问题是,C++编译器是一个“一遍”的编译器,意思是它不会试图保留它现在无法理解的东西,并在以后尝试解决它,当它有更多信息时这个例子,关于B类)。为什么今天仍然如此,超越了我。无论如何,就我所知,使B成为A的朋友类将会奏效。或者你的意思是你必须允许访问B之外的其他成员功能? – Baltasarq
@Baltasarq:想象根据*之后的内容*编译成相同的代码片段。哪个编译语言具有这个“功能”? – eudoxos
@eudoxos:Java,一个。它的语法需要一个多通道编译器。而另一个C++(但只在一个类中)。例如,'class Foo {public:set_item(int val){item = val;} private:int item;};' –