-4
  • 为什么 main.cpp 的头文件只需要包含.h头文件只包含声明而不包含实现?

  • 我可以在包含声明和实现的 cpp 文件中编写一个类,然后将该 cpp 文件作为头文件包含到 main.cpp 中吗?

  • 如何包含不在此项目中的头文件?

4

2 回答 2

1

从技术上讲,头文件(或您决定使用的任何其他文件#include)绝对可以包含作为一个整体构成完整 C++ 程序的任何内容。

当编译器(技术上称为“C 预处理器”的编译器包的一部分)#include "somefile.h"在源代码中看到 a 时会发生什么,它会获取该文件,并且基本上将其“粘贴”到正在编译的主文件中。因此,您可以通过打开头文件、标记所有然后将其粘贴到主文件中来“假装”成为预处理器。

关于头文件的要点主要是避免将同一位C++复制粘贴到几个源文件中。因此,例如,可以将类的声明放入头文件myclass.h中,将实际实现放入myclass.cpp文件中,然后程序的另一部分使用myclass只需要包含头文件即可。

不属于您的项目的头文件通常用尖括号括起来,#include <header.h>包括来自其他项目的“header.h”。

于 2013-05-02T15:01:15.393 回答
1

标题真的很简单。他们所做的只是将 .h 文件中的代码副本粘贴到 #include 的位置。

C/C++ 需要知道对象的大小或参数的类型和数量,但它不需要知道实现。自由函数的默认链接总是外部的。所以通过写作int myFunc();,你实际上是在写作extern int myFunc()。只要该功能在不同的编译单元(已编译的 cpp 文件)中实现,就可以正常工作。

是的,您可以#include cpp 文件,但如果您实际编译您的“header.cpp”和“main.cpp”,您将在链接时遇到多重定义问题。只需将 .cpp 文件留在您的 make 文件或项目之外。许多库都.hpp将其用作 C++ 头文件的扩展,这些头文件的整个实现是内联的。

于 2013-05-02T15:01:27.340 回答