C++ 添加#include<;向量>;到MFC项目

C++ 添加#include<;向量>;到MFC项目,c++,stl,mfc,C++,Stl,Mfc,我正在尝试将#include添加到我的MFC项目中。它可以编译,但我得到以下警告(只是其中一些警告,实际列表要长得多): 我可以通过这样做让它安静下来: #pragma warning(push) #pragma warning(disable: 4995) #include <vector> #pragma warning(pop) #pragma警告(推送) #杂注警告(禁用:4995) #包括 #布拉格警告(pop) 但我很好奇为什么图书馆会发出这些警告?如果有更好的方法来

我正在尝试将
#include
添加到我的MFC项目中。它可以编译,但我得到以下警告(只是其中一些警告,实际列表要长得多):

我可以通过这样做让它安静下来:

#pragma warning(push)
#pragma warning(disable: 4995)
#include <vector>
#pragma warning(pop)
#pragma警告(推送)
#杂注警告(禁用:4995)
#包括
#布拉格警告(pop)

但我很好奇为什么图书馆会发出这些警告?如果有更好的方法来解决这个问题,而不是抑制警告?

此警告表示已标记为过时的功能,在未来的版本中可能不再支持该功能

因此,您可以有两种方法来处理它:第一种是您使用的方式,用pragma deprecated标记它,或者您可以使用它们的安全版本

例如,Strcpy有一个名为StringCchCopy/StringCbCopy的对应函数,get有get\s。您可以从MSDN中找到它们


祝你好运

尝试在
stdafx.h
中的任何包含之前添加
#define STRSAFE_NO_DEPRECATE
。或者将其添加到项目设置中的“定义”列表中。至少从2010年开始,我认为这是不必要的。看起来您正在使用VS2008。MS希望您使用上述功能的
“安全”
版本(
strcat\u s
sprintf\u s
等)。我发现他们的标准库在默认情况下不这样做很奇怪。你没有混合其他VS版本的标准库,对吗?@WhozCraig:我想我没有。我将尝试添加
#定义STRSAFE_NO_DEPRECATE
。问题在于知道stdafx.h的哪个include首先被调用。它们几乎存在于每个
.cpp
文件中。我的意思是在
stdafx.h
中包含的任何其他包含之前,将其放入
stdafx.h
,以防不清楚。正如我所说的,只需编辑项目设置,并在C/C++设置下的预处理器定义中设置(调试和发布构建配置)可能会更容易。@WhozCraig:哦,我明白你的意思了。虽然这与我的警告类似,但在全球范围内。因此,我很好奇如何才能得到一个新版本的
std::vector
库,它使用了微软建议的所有安全API,并带有该警告?它不会抑制所有的反对意见,只会抑制
strsafe
库周围的反对意见。其他不相关的弃用仍将被标记。就我个人而言,我至少要升级到VS2010或VS2013。谢谢。但我不是在写图书馆。这些函数来自
std::vector
。如果不使用
std::vector
,此警告会消失吗?
#pragma warning(push)
#pragma warning(disable: 4995)
#include <vector>
#pragma warning(pop)