我有以下文件:
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?
答案 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 ++,转到添加按钮并添加您的包含目录