gpt4 book ai didi

c++ - C++ 中没有定义的类声明

转载 作者:太空狗 更新时间:2023-10-29 23:31:04 25 4
gpt4 key购买 nike

我对 C++ 没有太多经验,我对此处 Qt 文档中的以下几行有疑问:http://qt-project.org/doc/qt-4.8/mainwindows-application-mainwindow-h.html (顶部注释后的第 4-6 行)

 class QAction;
class QMenu;
class QPlainTextEdit;

由于 QAction、QMenu 和 QPlainTextEdit 是 Qt 的库类(单击它们会转到它们的文档页面),难道不应该使用“#include”将它们包括在内吗?仅仅用关键字“class”声明它们有什么用?据我所知,编译器会将其视为一个全新的类,与库类 QAction 无关。

但是,“mainwindow.cpp”文件 (http://qt-project.org/doc/qt-4.8/mainwindows-application-mainwindow-cpp.html) 不包含类 QAction 的任何定义,尽管它的对象在代码中被使用。

这是怎么回事?

编辑:问题的进一步解释

查看 MainWindow 类的 createActions 方法 (http://qt-project.org/doc/qt-4.8/mainwindows-application-mainwindow-cpp.html)。这里正在创建 QAction 类的对象,但我找不到 QAction 类的定义。

最佳答案

声明一个类,而不是定义它,足以让编译器知道某个名称指的是一个类型,这让你在某些设置中使用该类型。具体来说,已声明但尚未定义的类型是不完整类型,您可以通过多种方式使用不完整类型:

  • 在函数声明中,函数的返回类型和参数类型可能是不完整的(但当然不是在函数的定义中)。*

  • 如果 T 是不完整类型,则 T*T& 以及它们的 CV 限定版本是类型齐全。

所以你可以这样写:

class Foo;  // we only need to know that `Foo` names a type.

struct Bar { Foo * p; }; // complete definition of `Bar`.

Foo mangle(Foo x, Foo y); // function declaration

您可以根据需要随时声明一个类或任何类型。唯一必须唯一的是定义(“单一定义规则”由此而来)。

*) 除了一个异常(exception):void 始终是不完整的,您可以通过完全不返回任何内容来返回 void 类型。

关于c++ - C++ 中没有定义的类声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9749013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com