c++ - C++ 包括文件
问题描述
我遇到的一个问题是,当使用一个类(一个头文件,一个 cpp 文件)时,我想知道当头文件中包含一个类的源文件中也需要的文件时,我该怎么办?我举个例子
header.h(文件)
#include <Windows.h>
#include "some_other_header.h"
class class_name
{
public:
LRESULT CALLBACK FUNC(HWND, UINT, WPARAM, LPARAM);
private:
}
source.cpp(文件)
#include "header.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)
如您所知,LRESULT 是库的一部分,它不需要包含在“source.cpp”中,因为它包含在“header.h”文件中。问题是如果我在任何其他文件中包含“header.h”,我也不必包含,因为它已经在“header.h”中,这有点令人困惑,有点难以解释,但我想完全避免这可能带来的任何错误。
解决方案
没有必要。#include
指令将文件的内容逐字复制到#include
. 因此,文件中包含的任何文件都将被包含在内。在您的示例中,您的 .cpp 文件中包含Windows.h>
,"some_other_header.h
和header.h
(以及包含的任何标头Windows.h
and some_other_header.h
)。
无论如何,包含它们通常是一个好习惯,这样您就不会依赖上面的某些头 10 文件,但通常在头-源对中省略它。如果您需要它们来进行函数声明和定义,那么复制标头并不是很合理。
另一方面,由于上述机制,您应该添加标头保护。如果没有警卫,当包含来自不同来源的标头时,您可能会遇到双重定义问题。如果您要在多个文件中使用此标头,则它们是必需的,否则是良好的做法。
标准标头保护看起来像这样:
#ifndef HEADER_H //or any other name, typically it's filename or filename with path
#define HEADER_H
//your header here
#endif
大多数编译器还支持非标准编译指示指令L
#pragma once
//your header here
推荐阅读
- netsuite - 在保存的搜索公式中设置日期范围过滤器
- html - img-tag 中的图像与源大小不同
- angular - 如何在输入焦点上动态控制Angular 2+中的父元素类?
- php - 你能给我澄清一下吗
- javascript - 如何使我的轮播居中?
- html - 如何使 div 具有父级的 100% 高度,而与子级的大小无关?复杂的布局
- javascript - sharepoint 中的多个唯一列
- angular - Angular 2 Release 6 如何添加 esri ArcGIS API for JavaScript 3.24
- python - Django连接光标不显示任何表?
- node.js - 获取去重的 npm 树