C++ 变更项目';s dirs中断预编译文件的创建

C++ 变更项目';s dirs中断预编译文件的创建,c++,visual-studio,C++,Visual Studio,我使用MSVC2017(如果有必要,使用MSVC2013工具链)。 所以,我用“静态库”项目和控制台应用程序创建了新的解决方案。在这一步,它起作用了 现在,我更改了lib项目的一些项目路径: 输出目录:$(SolutionDir)BuildDebug 中间目录:$(OutDir)\Debug 我在pch.h中添加了以下内容: #包括 #包括 #包括 #包括 我在控制台应用程序中添加了对我的库和库的include dir的引用。现在Studio无法编译我的项目,显示了关于 错误C2061:语法

我使用MSVC2017(如果有必要,使用MSVC2013工具链)。 所以,我用“静态库”项目和控制台应用程序创建了新的解决方案。在这一步,它起作用了

现在,我更改了lib项目的一些项目路径:

输出目录:$(SolutionDir)BuildDebug
中间目录:$(OutDir)\Debug
我在pch.h中添加了以下内容:

  • #包括
  • #包括
  • #包括
  • #包括
我在控制台应用程序中添加了对我的库和库的include dir的引用。现在Studio无法编译我的项目,显示了关于

错误C2061:语法错误:标识符“LONG”

和相关的。 我发现任何地方都没有.pch文件。 我还单独使用相同的静态库创建了测试解决方案,并更改了相同的路径。它似乎编译成功了,但Intellisense在“LONG”下加了红色,表示“未定义”。 可能有人也面临同样的问题

更新:我刚刚尝试创建一个新的解决方案。我添加了静态lib项目,然后添加了带有单个函数
int func(LONG v)
的简单文件。它似乎在编译。但是,我将控制台应用程序添加到解决方案中,将其与静态库链接,并且它不是编译的

错误C2065:“长”:未声明的标识符

更新2:我发现静态库文件没有添加到预编译头中。因此,我直接将其包含在标题中,并添加了
typedef struct IUnknown IUnknownIUnknown
相关的新错误,在windows.h之前出现code>。它似乎起作用了。但我仍然不明白到底发生了什么。

“预编译头”是一种构建速度优化。如果他们给你带来问题,你可以暂时关闭他们的使用。当它们关闭时,
.pch
不再使用,但
.h
仍在使用

我希望您仍然会有缺少的
LONG
,因为它甚至不在
.h


为了您的理智,为预编译的
.h
使用显式名称可能会很有用。我不确定VS2017默认情况下是否已经使用了
pch.h
,或者它仍然使用
stdafx.h
。不管怎样,这只是一个默认值。如果需要,还可以将它们重命名为
staticlib.h/.pch
executable.h/.pch
,以避免混淆。编译器没有pch的默认名称;它依赖于编译器开关
/Yc
(创建)和
/Yu
(使用)。

我希望禁用预编译头是最后的措施。此外,我仍然想知道问题出在哪里,以确保我没有做过非常糟糕的事情(并且没有其他事情被破坏)。默认情况下,MSVC2017将预编译头命名为pch.h,但我不认为这是一个问题-我仍然可以在其中包含其他头,如,并且它可以工作。@qloq:禁用pch是解决问题的一个步骤。一旦解决了所有非PCH问题,就可以重新启用它。至于命名问题,问题可能是您有两个名为
pch.h
的文件,一个用于静态库,另一个用于可执行文件。我试图禁用pch。按照预期工作(以相同的方式),只是我仍然需要在Windows.h之前添加typedef。顺便说一下,我只使用了一个预编译头(在静态库中)。