【问题标题】:What does "class className;" by itself do in C++? [duplicate]"class className;" 是什么意思本身在 C++ 中做吗? [复制]
【发布时间】:2012-10-06 07:02:59
【问题描述】:

可能重复:
C++ - Forward declaration

所以在我的头文件中,我定义/声明了一个类,其中包含名为 User

的所有功能

然后在 .cpp 源文件中顶部附近有 class User;

我是 c 新手,但在我查看的几个教程中找不到答案,所以来到这里

它有什么作用?

谢谢。

【问题讨论】:

  • 谢谢大家,是的,我知道我将它标记为 C,但后来意识到它是 C++,我们在某些时候都是新人

标签: c++


【解决方案1】:

它被称为前向声明,使编译器能够识别类,而无需实际了解其内部结构。您只需通知编译器存在这样的类,并且声明指向它的指针不会引发错误。

替代方法是包含声明类的相应头文件,但如果您只需要指向该类型的指针,那将太重了。

【讨论】:

  • 好的,那么您是否需要在您将在其中引用该类的每个 cpp 文件的顶部执行此操作?
  • 不,您不必这样做。正如回答者所说,您还可以包含具有类声明的头文件。当您引用 MyClass thisIsMyClass 之类的对象时,编译器需要知道 MyClass 的大小,因此前向声明不适合,但是如果您使用指向 MyClass* pThisIsMyClass 之类的类的指针,那么编译器只需要知道一个名为 MyClass 的对象在某处定义,然后您可以使用前向声明或包含标题。
【解决方案2】:

这是一种所谓的“前向声明”:它使编译器知道该类,而无需实际定义它。请注意,这是 C++,而不是 C。

【讨论】:

    【解决方案3】:

    声明类而不实际定义它。从这个意义上说,它没有什么不同:

    void doSomething(void);
    

    该原型告诉编译器doSomething() 存在,但实际上并没有具体说明它的作用。

    它通常用在你需要类存在的地方(所以你可以以某种方式引用它)但你不需要知道它的任何属性。

    【讨论】:

      猜你喜欢
      • 2015-12-03
      • 2017-01-17
      • 2014-12-03
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      相关资源
      最近更新 更多