Eclipse c ++包括两次错误

时间:2015-11-02 20:49:40

标签: c++ eclipse eclipse-cdt

我有以下文件:

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

Polygon.h包含

#ifndef __POLYGON_H
#define __POLYGON_H
#endif

问题是:当我点击'Build All'时,我在Rectangle和Triangle cpp文件(它们没有得到头文件)中交替出现错误,它是其中之一但从来没有。

错误说明:

  

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

我使用它两次,因为显然矩形和三角形都从Polygon继承。

修改

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

完成的

HALP?

2 个答案:

答案 0 :(得分:4)

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

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

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

根据评论

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

另一方面,图书馆就是他们自己。您可以假设某人(将使用您的项目)已经安装了库(甚至可能自定义)。如果他们需要使用您自己的库项目,他们只会指示编译器使用他们的库版本编译您的项目,如果您使用#include <>语法包含它。使用其他语法会让他们陷入困境。

您可以将所有标题放在一个大文件夹中,并告诉编译器查看,但想象一下有数百个头文件的项目。该文件夹将是凌乱和无法管理的。此外,为您的标题命名也很常见,这样您就不必向内查看它的作用。现在假设您需要在项目中使用queue,并且最终会得到#include <queue.h>。没有任何外部库(您在整个项目中使用)没有名为queue.h的标头的概率是多少?这样你最终会得到混乱的编译器,因为它无法决定你的queue

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

答案 1 :(得分:1)

你有,你的编译器正在搜索标题,但他找不到它们。 只是去: 左键单击您的项目属性 - > c / c ++ general-&gt;路径和符号 - &gt;包括在语言中选择GNU C ++,转到添加按钮并添加您的包含目录