我遇到了常见错误fatal error C1083: Cannot open include file: 'afxres.h': No such file or directory
。搜索引擎显示了大量的点击,但没有一个建议的解决方案适合我。
通常这似乎是路径的问题。因此,我确保安装了相关的库,并找到了该文件。使用绝对路径作为#include工作正常:
#include "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include\afxres.h"
但是,如果我将目录(C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ atlmfc \ include)添加到项目设置(或Microsoft.Cpp.Win32.User属性表),并且试试这一行:
#include "afxres.h"
我再次收到错误C1083。然而,Visual Studio显然可以找到该文件 - 如果我右键单击文件名并选择“打开文档'afxres.h'”,它会立即打开它!
为什么Visual Studio会忽略我指定的#include路径?我以类似的方式包含的其他#include路径可以很好地工作。
答案 0 :(得分:4)
但我之前确实有过Visual C ++ 2010 Express,它似乎已经导入了一些设置
这是必不可少的评论。 Express不支持ATL和MFC。还缺少的是,您之前在VS2010上启动的项目中只遇到此问题。
请注意,不必像在项目属性表中那样添加路径。在屏幕截图中可见,它已被继承属性中的$(VCInstallDir)atlmfc\include
条目覆盖。因此得出的结论是$(VCInstallDir)宏值是错误的。
从安装事故或重击注册表开始,当您转换之前在VS2010中启动的项目时,可能会发生这种情况。从Property Manager切换回Solution Explorer窗口,右键单击项目Properties,General页面。更改"平台工具集"设置从v100到v110。您现在将使用VS2012包含目录而不是VS2010 Express目录。
请注意,对Microsoft.Cpp.Win32.User项目属性表的更改将影响所有您的项目,您将要重置它。
答案 1 :(得分:1)
首先,确保在项目属性中启用了MFC>配置属性>一般
必须将mfc的使用设置为静态或动态库。
其次,为了确保cl.exe使用您指定的所有包含目录,您需要转到项目属性> c / c ++>一般和更改抑制启动横幅到no / nologo -
这将为每个源文件提供完整的cl命令,准确显示Visual Studio正在尝试使用您提供给它的代码和配置选项。
例如。 cl /c /ZI /nologo- /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yc"StdAfx.h" /Fp"Debug\test.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /showIncludes /analyze- /errorReport:prompt stdafx.cpp
如果它正在使用您的额外包含文件夹,您应该在命令行中看到许多额外的-I
开关。