Eclipse c++包含头两次错误

Eclipse c++ include header twice Error

本文关键字:两次 错误 c++ 包含头 Eclipse      更新时间:2023-10-16

我有以下文件:

Polygon.h
Polygon.cpp
Rectangle.cpp
Triangle.cpp

Polygon.h被包裹

#ifndef __POLYGON_H
#define __POLYGON_H
#endif

问题是:当我点击"全部构建"时,我在矩形和三角形的cpp文件中交替出现错误(它们没有得到头文件),要么是它们中的任何一个,但永远不会同时出现。

错误描述:

C1083:无法打开包含文件:"Polygon.h":没有这样的文件或目录

我用了两次,因为矩形和三角形都继承了多边形。

编辑

包含使用#include <Polygon.h> 完成

暂停?

如果在代码中写入#include <Polygon.h>,编译器将在其预定义的include(如语言头文件和其他文件)中查找Polygon.h,但不在当前文件夹(文件中已写入include)中查找。您可以告诉编译器(使用命令行参数或在IDE中单击它),它应该使用#include < >语法在其他地方查找包含的文件。

然而,最好以不同的方式编写#include#include "Polygon.h",因为这意味着,"在当前文件的文件夹中查找它。",这正是你想要的。

可以更一般地解释第二CCD_ 7语法。如果你把一个文件放在双引号里,你可以告诉文件的完整路径。事实上,它不是以/C:\或类似的名称开头的,这意味着,请查看当前文件夹内部。

根据注释进行编辑
据我所知,(根据大多数开源项目)包含头文件被认为是更好的做法,头文件是使用#include "file.h"的项目的一部分,头文件也是使用#include <file.h>的外部库的一部分。这是因为整个项目(不包括任何库)是一个完整的单元,结构(如果移动)将立即移动,并且在项目的不同更改中,结构可能保持不变。

另一方面,图书馆是为自己而存在的。您可以假设有人(将使用您的项目)已经安装了库(甚至可能自定义)。如果他们需要使用您的项目和他们自己的库,他们只会指示编译器使用他们的库版本编译您的项目,如果您使用#include <>语法将其包括在内。使用其他语法会给他们带来麻烦。

您可以将所有头文件放在一个大文件夹中,并让编译器在其中查找,但想象一下一个包含数百个头文件的项目。那个文件夹会很乱,无法管理。此外,为标题命名是很常见的,这样你就不必查看内部来了解它的作用。现在想象一下,你的项目中需要一个queue,最终得到的是#include <queue.h>。您的外部库(您在整个项目中都在使用)中没有一个标题queue.h的可能性有多大?这样的话,您最终会遇到混乱的编译器,因为它无法决定您指的是哪个queue

此外,我相信找到#include "file"会比#include <file>快一点,但这确实是一个很小的开销。

现在,编译器正在搜索标头,但找不到它们。只需转到:左键单击您的项目属性->c/c++常规->路径和符号->包含在语言中选择GNU c++,转到添加按钮并添加您的包含目录