struct A
{
void f1()
{
f2(); // ok, though f2() is not declared before
}
void f2()
{}
void f3(X*) // error: unknown type name 'X'
{}
struct X
{};
};
int main()
{
A a;
}
为什么不需要成员函数就必须向前声明成员类型?
这与complete-class context有关。当您处于成员函数的主体中时,该类将被视为完整的,并且可以使用该类中定义的任何内容,无论在类中的何处声明它。
函数参数不是该上下文的一部分,因此它们必须是在您尝试使用它们时就已知的类型。