我在Windows 10下使用Visual Studio 2015社区。 p>
我在文件" xie.cpp":
中有这个代码#include "stdafx.h"
void s()
{
XInputEnable(TRUE);
}
这里的stdafx.h:
#pragma once
#include <windows.h>
#include <Xinput.h>
当我编译xie.cpp时,收到此错误消息:
xie.cpp(5): error C4995: 'XInputEnable': name was marked as #pragma deprecated
当我发现这个令人费解时,我复制了项目树,附加了一个&#34; 2&#34;到vcxproj文件的名称,并将副本添加到解决方案中。当我在重复的项目中编译xie.cpp时,我没有收到错误消息。
我已检查了两个项目的所有项目配置设置。他们是出类拔萃的。我删除了x64子树,其中重新编译了编译的目标文件。无论我做什么,原始项目都会编译错误,而复制的项目会成功编译。我想我可以继续使用复制的项目,但我确实想知道为什么我收到错误信息。
有人可以为我建议进一步的调查吗?
更新
问题是我不了解预编译的标题以及我想要的。当我将目标平台版本从8.1更改为10.0.14393.0,然后重建项目时,Xinput.h标头来自Windows 10工具包,而不是Window 8.1工具包。唯一的区别是Windows 10版本包含以下这些行:
#if(_WIN32_WINNT >= _WIN32_WINNT_WIN10)
#pragma deprecated(XInputEnable)
#endif
_WIN32_WINNT和_WIN32_WINNT_WIN10的值都为0x0A00,所以,在此版本的Xinput.h中,XInputEnable被标记为已弃用
任何人都知道为什么?
答案 0 :(得分:1)
答案是VS2015不会将项目配置中目标平台的更改视为重新编译标头的原因。因此,即使平台更改可以将一组标头交换为另一组标头,在平台更改之后,您仍将使用先前预编译的标头,直到您强制它们被显式重新编译。
这里的效果是掩盖了这样一个事实,即我的工作程序实际上与有bug的那个程序完全相同,因为工作程序仍在使用旧的头文件(其中XInputEnable未标记为已弃用),尽管如此我自己编写的配置和源文件在两个项目中都是相同的。
我想我的教训是,如果您更改目标平台,则应立即进行重建。