我刚刚发现此代码在 VS 2010 的头文件中(至少)是合法的
class AClass; //forward declaration of AClass (incomplete type);
class UseAClass
{
public:
AClass returnAClass(); //return a copy of incomplete type - AClass ???
}
有人能解释一下为什么我可以写这个吗?
我刚刚发现此代码在 VS 2010 的头文件中(至少)是合法的
class AClass; //forward declaration of AClass (incomplete type);
class UseAClass
{
public:
AClass returnAClass(); //return a copy of incomplete type - AClass ???
}
有人能解释一下为什么我可以写这个吗?
这是允许的,因为编译器在声明返回的函数AClass
时不需要知道 的大小。但是,如果您尝试在那里提供函数的定义(或在 class中创建类型的成员),则编译器需要,因此您需要包含定义的头文件。你也可以这样做:AClass
AClass
UseAClass
sizeof(AClass)
AClass
void acceptAClass(AClass obj); //only the declaration, NO DEFINITION!
请注意,这种技术通常用于打破头文件的循环依赖关系,因为这不需要在文件中包含一些头.h
文件:只需前向声明就足够了。在.cpp
文件中,您包含标题并提供定义。