为什么Qt无法识别我的头文件?无法打开包含文件,没有这样的文件或目录。

17
我在我的.pro文件中有以下内容,我有一些文件需要包含头文件,例如:#include "StdAfx.h"。但是我得到了一个错误:

error Cannot open include file: 'StdAfx.h': No such file or directory.

无论我使用#include "StdAfx.h"还是#include "Shared/StdAfx.h"都会得到同样的错误。这非常令人沮丧,除非Qt开始识别我的头文件,否则我无法进行任何实际工作。我在网上找不到解决办法。发生了什么事?
.pro文件内容为:
HEADERS  += ibproject.h \
Shared/StdAfx.h \
Shared/TwsSocketClientErrors.h \
Shared/TagValue.h \
Shared/shared_ptr.h \
Shared/ScannerSubscription.h \
Shared/OrderState.h \
Shared/Order.h \
Shared/IBString.h \
Shared/HScrollListBox.h \
Shared/Execution.h \
Shared/EWrapper.h \
Shared/EClientSocketBaseImpl.h \
Shared/EClientSocketBase.h \
Shared/EClient.h \
Shared/Contract.h \
Shared/CommonDefs.h \
Shared/CommissionReport.h \
SocketClient/src/EClientSocket.h
ewrappersubclass.h 

INCLUDEPATH += $$PWD/SocketClient
DEPENDPATH += $$PWD/SocketClient

编辑:为什么我会被踩?我遇到了一个合法的问题。

图片显示它同时识别和不识别


那么“stdafx.h”在哪个目录下? - john
@john 目前它在 shared/stdafx.h 中,但说实话,我已经将其复制并粘贴到根目录和共享文件夹中进行测试,只是为了测试是否是因为我有一些语法错误。不,即使在两个文件夹中都存在,它也无法识别它。 - Terence Chow
3
我不熟悉QT,但你是否尝试将包含stdafx.h的目录添加到INCLUDEPATH中,类似于“INCLUDEPATH += $$PWD”? - john
1
这是一个完全有效的问题;我遇到了完全相同的问题。你找到解决方案了吗? - johnbakers
@OpenLearner 很不幸,没有。在重新启动时出了一些小问题,但后来它又没用了...这太令人沮丧了,所以我在另一个 GUI 中重新做了这个项目... - Terence Chow
显示剩余2条评论
7个回答

13

我也遇到了同样的问题。原因是我同时使用两台计算机,而makefile尝试按照上一个计算机上设置的路径查找文件。但一切似乎都很好--就像在您的情况下一样,将光标悬停在include上时,工具提示显示了正确的路径,同时F2(跟随光标下的符号)使我导航到了正确的头文件。

我以为每次更改.pro文件时,qmake都会重新制作,但显然不是这样。

只需运行“构建”->“qmake”,它就可以解决问题。


另外,Qt 无法识别路径中的空格,请考虑这一点。 - Summer Sun

9

您需要更新qmake文件。

Build-> Run qmake

3

add in .pro INCLUDEPATH += $$_PRO_FILE_PWD_


这解决了我的问题。该项目在几周内一直运行良好,但当我更改编译工具包时,一个头文件不再被找到。将此INCLUDEPATH添加到*.pro文件中解决了问题,但我仍然不明白发生了什么以及为什么必须进行更改? - Petri Pyöriä

1

我知道这篇文章很老,但它刚好发生在我身上。

INCLUDEPATH += $$PWD

搞定了。别忘了先 qmake 再全部构建。

祝一切顺利!


1
我偶尔会遇到这个问题,主要是在提交拉取请求或复制代码时。简单的解决方法是删除所有qt生成的文件,然后进行“构建->qmake”,最后重新构建全部。这是Qt的一个Bug,它无法正确识别需要重新生成的文件,即使IDE能够很好地链接所有内容,在编译时也会出现错误。当它生成ui_formname.h头文件时,有些更改不会立即生效。有时需要重启QtCreator。删除并重新启动总是可以解决这个确切的问题。祝你今天愉快!

0

文件不在您的包含路径中。

pro文件的HEADERS部分列出了项目依赖的头文件。如果这些文件在类定义中具有Q_OBJECT宏,则moc会考虑处理它们。将文件添加到HEADERS中不会将其放入包含搜索路径中。

您还有一个杂乱的头文件(ewrappersubclass.h),因为您忘记转义行末。

我怀疑这是Windows大小写敏感问题的原因。编译器是区分大小写的,但文件系统不是;或者反之亦然。因此,当您应该使用#include“Shared/StdAfx.h”时,您会使用#include“shared/stdafx.h”


我已经添加了一张截图,这样你就可以看到我确实正确地输入了大小写。我的INCLUDESPATH不需要添加StdAfx.h,因为我正在使用Shared/StdAfx.h进行包含...你有什么想法为什么会发生这种情况吗? - Terence Chow
你应该查看使用qmake生成的Makefile,以找出编译器所给出的包含路径。 - koan

0

这很可能是由于之前的C1189错误,详见此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接