Eclipse c++ include header 两次错误

Eclipse c++ include header twice Error

我有以下文件:

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

Polygon.h 用

包裹
#ifndef __POLYGON_H
#define __POLYGON_H
#endif

问题是:当我单击 'Build All' 时,我在矩形和三角形 cpp 文件(它们没有得到 header 文件)中交替出现错误,它是其中之一,但从来没有。

错误描述:

C1083: Cannot open include file: 'Polygon.h': No such file or directory

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

编辑

包含是使用 #include <Polygon.h>

完成的

停一下?

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

如果您在代码中写入 #include <Polygon.h>,这是一条消息,让编译器在其 pre-defined 包含(如语言 header 文件和也许还有其他人),但不在当前文件夹(文件的当前文件夹中,其中包含包含内容)。您可以告诉编译器(使用命令行参数或在 IDE 中单击它)它应该 使用 [=12= 在其他地方查找包含的文件]语法。

然而,最好将 #include 写得稍微不同一点:#include "Polygon.h",因为这意味着“在当前文件的文件夹中查找它。”,这正是您想要的。

第二个#include语法可以更一般地解释。如果将文件放在双引号内,则可以告诉文件的完整路径。事实上,它不是以 /C:\ 或类似的方式开头,查看当前文件夹。

根据评论编辑
据我所知,包含 header 被认为是更好的做法(根据大多数开源项目),它们是使用 [=18= 的项目的一部分] 和 headers,它们是使用 #include <file.h> 的外部库的一部分。那是因为您的整个项目(不包括任何库)是一个完整的单元,并且结构(如果移动)将立即移动并且结构可能会保持不变,即使对项目进行了不同的更改。

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

您可以将所有 header 放在一个大文件夹中并告诉编译器在那里查找,但想象一个包含数百个 header 文件的项目。那个文件夹会很乱 unmanage-able。此外,为您的 header 命名是很常见的,这样您就不必查看内部以了解它的作用。现在假设您的项目中需要一个 queue,而您最终会得到 #include <queue.h>。您的外部库(您在整个项目中都在使用)的 none 没有名为 queue.h 的 header 的概率是多少?这样你最终会遇到混淆的编译器,因为它无法决定你的意思 queue

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