3

我刚刚发现此代码在 VS 2010 的头文件中(至少)是合法的

class AClass; //forward declaration of AClass (incomplete type);
class UseAClass
{
   public: 
      AClass returnAClass(); //return a copy of incomplete type - AClass ???
}

有人能解释一下为什么我可以写这个吗?

4

1 回答 1

5

这是允许的,因为编译器在声明返回的函数AClass时不需要知道 的大小。但是,如果您尝试在那里提供函数的定义(或在 class中创建类型的成员),则编译器需要,因此您需要包含定义的头文件。你也可以这样做:AClassAClassUseAClasssizeof(AClass)AClass

void acceptAClass(AClass obj); //only the declaration, NO DEFINITION!

请注意,这种技术通常用于打破头文件的循环依赖关系,因为这不需要在文件中包含一些头.h文件:只需前向声明就足够了。在.cpp文件中,您包含标题并提供定义。

于 2013-08-28T05:43:55.547 回答