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>
快一点,但这确实是很小的开销。
我有以下文件:
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>
快一点,但这确实是很小的开销。