为什么成员类型需要前向声明而成员函数不需要?
Why do member types need to be forward declared while member functions needn't?
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有关。当您在成员函数的主体中时,class 被认为是完整的,并且可以使用 class 中定义的任何内容,无论它在 class 中的何处声明。
函数参数不是该上下文的一部分,因此它们必须是您尝试使用它们时已知的类型。
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有关。当您在成员函数的主体中时,class 被认为是完整的,并且可以使用 class 中定义的任何内容,无论它在 class 中的何处声明。
函数参数不是该上下文的一部分,因此它们必须是您尝试使用它们时已知的类型。