This question already has answers here:
C++ Hash Deprecation Warning
(3 个回答)
4年前关闭。
我从 Stroustrup 的网站中包含了 std_lib
我的代码是:
所以我有两个错误:
从一开始就使用“std_lib_facilities.h”,除了这个std_lib的路径之外,我的代码与这本书等效。有人能解释一下是什么意思吗?可以用它继续阅读这本书。
(注意
但是,如果您想继续使用 Stroustrup 提供的
最快的方法是在源代码中使用
时机成熟时,将其与
(3 个回答)
4年前关闭。
我从 Stroustrup 的网站中包含了 std_lib
我的代码是:
#include "c:\Users\theresmineusername\Documents\Visual Studio 2017\std_lib_facilities.h"
int main()
{
cout << "Hello, World!\n";
return 0;
}
所以我有两个错误:
1. E1574 статическое объявление не удалось по причине "<hash_map> is deprecated and will be REMOVED. Please use <unordered_map>. You can define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS to acknowledge that you have received this warning." ConsoleApplication2 c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.24930\include\hash_map
2. C2338 <hash_map> is deprecated and will be REMOVED. Please use <unordered_map>. You can define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS to acknowledge that you have received this warning. ConsoleApplication2 c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24930\include\hash_map
从一开始就使用“std_lib_facilities.h”,除了这个std_lib的路径之外,我的代码与这本书等效。有人能解释一下是什么意思吗?可以用它继续阅读这本书。
最佳答案
std_lib_facilities.h
是 Stroustrup 自己编写的头文件,可以是 downloaded from www.stroustrup.com 。它是 不是标准的 C++ 头文件 但显然反射(reflect)了 Stroustrup 的想法,即在最初几周内对所有初学者隐藏甚至最简单的语言复杂性。
正如头文件本身所说:
我个人认为这是一个非常糟糕的主意,对 Bjarne Stroustrup 表示敬意,他是一个比我所向往的更伟大的天才。
头文件充满了被认为是糟糕的编程风格的东西(尤其是 using namespace std;
,它永远不应该在头文件的全局范围内使用,或者从标准容器类派生)。它还迎合了过时的编译器,这些编译器可能还不能正确支持 C++ 的某些"new"特性,使用了很多丑陋的预处理器指令。
头文件本身似乎已经过时了(我链接的那个文件已经有 7 年历史了),我不确定 Stroustrup 是否更新过它。
预处理器指令之一使您的编译器错误地包含 <hash_map>
,而它应该是 <unordered_map>
。当然,这很荒谬,因为您的程序只想打印一条 hello world 消息,甚至对哈希映射都不感兴趣。
以下是您的程序在 正确的 C++ 中的样子:
#include <iostream>
int main()
{
std::cout << "Hello, World!\n";
return 0;
}
(注意
return 0;
在 main
中是可选的。)但是,如果您想继续使用 Stroustrup 提供的
std_lib_facilities.h
学习帮助,无论如何您必须在几周内取消学习,那么请按照错误消息本身的说明进行操作:定义 _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
。最快的方法是在源代码中使用
#define
:#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include "c:\Users\theresmineusername\Documents\Visual Studio 2017\std_lib_facilities.h"
int main()
{
cout << "Hello, World!\n";
return 0;
}
时机成熟时,将其与
#include
的 std_lib_facilities.h
一起扔掉。关于c++ - 当 Stroustrup 的书中包含 std_lib 时,不了解 VS 中 HelloWorld 上的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42314399/
10-13 08:13