为什么main.cpp的头文件只需要包含.h
头文件只包含声明而不是实现?
我可以在包含声明和实现的cpp文件中编写一个类,然后将该cpp文件作为headfile包含在main.cpp中吗?
如何包含不在此项目中的头文件?
答案 0 :(得分:1)
从技术上讲,头文件(或您决定#include
的任何其他文件)可以包含任何整体构成完整C ++程序的内容。
当编译器(技术上,称为“C预处理器”的编译器包的一部分)在源代码中看到#include "somefile.h"
时,会发生什么?它接收该文件,并且基本上将其“粘贴”到你正在编译的主文件。因此,您可以通过打开头文件“伪装”为预处理器,标记所有内容然后将其粘贴到主文件中。
关于头文件的要点主要是为了避免将相同的C ++拷贝和粘贴到几个源文件中。因此,例如,类的声明可以放入头文件myclass.h
,实际实现到myclass.cpp
文件,然后使用myclass
的程序的另一部分只需要包括标题。
不属于项目的标题文件通常用尖括号括起来,#include <header.h>
将包含来自其他项目的“header.h”。
答案 1 :(得分:1)
标题非常简单。他们所做的只是粘贴.h文件中的代码副本来代替#include。
C / C ++需要知道对象的大小或参数的类型和数量,但它不需要知道实现。自由函数的默认链接始终是extern。因此,通过撰写int myFunc();
,您实际上正在撰写extern int myFunc()
。只要该函数在不同的编译单元(已编译的cpp文件)中实现,即可正常工作。
是的,你可以#include cpp文件,但是如果你真的编译了你的&#39; header.cpp&#39;和&#39; main.cpp&#39;您将在链接时遇到多重定义问题。只需将.cpp文件保留在make文件或项目之外。许多库使用.hpp
作为C ++标题的扩展,它们的整个实现都是内联的。