c++ - IntelliSense 引擎无法正常运行的错误太多

标签 c++ visual-studio windows-installer visual-studio-2017

Please leave the window-installer tag in - this Q/A is not for C++ experts, but for people like me, who use C++ when they have to. They may face this potential time-waster, and need a quick fix to get msi.h or other includes operational quickly. VS2017 templates must have changed quite a bit - I didn't see this issue before.


Visual Studio 2017 Community Edition 安装了所有可用的 C++ 组件(也许这个问题在专业版中不存在?)。

  1. 文件 => 新建 => 项目... => Visual C++\Windows 桌面\Windows 控制台应用程序 => 确定
  2. 进行快速测试以验证没有错误。 右键单击解决方案 => 构建。如前所述,不应显示任何错误。
  3. 现在,在控制台应用程序的 CPP 文件中 main() 函数的正上方 #include stdafx.h 的正下方添加 msi.h 的包含:
#include <msi.h>
// And just to make things link:
#pragma comment(lib, "msi.lib")
  1. 一个红色的错误 V 形应该出现在第一行评论开始的左上角悬停时说:“IntelliSense 引擎无法正常运行的错误太多,其中一些在编辑器中可能不可见。PCH 警告:发生未知错误。未生成 IntelliSense PCH 文件。

  2. 现在进行构建应该会发现许多错误。在我的案例中,wincrypt.h - 它让我想到了 WIN32_LEAN_AND_MEAN - 请参阅下面的答案。我以为这些基础知识已经包括在内了。

我一直在所有新的 C++ Windows 控制台应用程序项目 中看到这个问题,但是当我在使用 Visual Studio 2013 创建的旧项目中尝试时,它使用 正确编译>msi.h 包含在链接 pragma 中。

从报错信息来看,肯定是预编译头(PCH)有问题。这就是让我失望的原因。

最佳答案

更新:其他人询问了其他包含文件(与 MSI 无关)的相同错误消息。我想这是一个不时发生的一般性问题 - 可能是很少使用的类(或包括 Windows.h - 也许)?

作为一个一般建议,这可能是一个隐藏的依赖性问题(缺少包含),或者包含的错误顺序文件(由于某些不是很明显的技术原因,您需要更改包含的顺序)或不正确或缺少定义(如下面一行的答案所示)。 我的看法:访问 github.com 并搜索类似的示例代码

对于我们这些偶尔需要 C++ 的人来说,解决这些问题可能非常笨拙,否则对于 C++ 专家来说是“众所周知的”(他们在几秒钟内将其修复为第二天性)。 C++ 专业人士:请记住,对于我们这些被迫在需要时笨手笨脚地使用 C++ 的人来说,诸如此类的问题可能会扼杀一整天的生产力——而且周围没有 C++ 专业人士可以询问——糟糕的情况! :-) - 我特此声明“善待你的 C++ 大师 - 如果你有他们 - 一天!”)。


stdafx.h ,尝试在 #pragma once 之后添加这个在其他包括之前:

#define WIN32_LEAN_AND_MEAN
// Windows Header Files:
#include <windows.h>

现在尝试重建您的解决方案,看看问题是否已经消失。

虽然简单,但奇怪的错误消息(在上面的问题中看到)会让人们偏离正轨,试图找出问题所在。此外,此行为在 VS2017 中似乎是新的 - 模板更改。

看起来包括<atlstr.h>也会起作用,所以这可能会使我的问题更加模糊。可以发誓我尝试过这个 - 也许在我进行了项目设置更改后仍然失败(正是我希望帮助其他人避免的)。

如果只有这些基本包含可以出现在文件中但被注释掉,那么它们可以按顺序快速启用以进行测试 - 没有任何大惊小怪。

关于c++ - IntelliSense 引擎无法正常运行的错误太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48129786/

相关文章:

c++ - unixaccept()函数两次返回相同的文件描述符

不支持 C++ 绑定(bind) UDP 套接字地址系列

c# - Silverlight 从 'dumb' 服务器按需加载引用数据

c# - 为什么我不需要非 visual studio c# 应用程序的引用

c# - 在 asp.net 中获取 request.files 的文件类型

windows-installer - 是什么导致 MSI 更新无法更新安装程序中的组件?

wix - 将命令行参数从 WiX 包传递给 MSI

c++ - Opencv圆检测-RAM加载

c++ - 引用 void* 的隐式类型转换

wix:从上下文菜单中单击“修复”时显示错误消息框