gpt4 book ai didi

c++ - “std_lib_facilities.h”显示错误

转载 作者:行者123 更新时间:2023-12-02 10:35:05 27 4
gpt4 key购买 nike

我正在使用Codeblocks 17.12,并且已经将编译器设置设置为C++ 11标准。我正在从Bjarne Stroustrup的书“编程-使用C++的原理和实践”中学习。在他的书中,他要求包括“std_lib_facilities.h”。我从他的网站复制了该文件,并将其保存在“Mingw”文件夹的“include”文件夹中。之后,我继续制作一个简单的程序:

#include<iostream>
#include "std_lib_facilities.h"
main()
{
std::cout<<"Hello world";
}

但是编译器显示以下错误和警告:

 warning: This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date.  
Please use a non-deprecated interface with equivalent functionality instead.
For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. [-Wcpp]

error: template-id 'do_get<>' for 'String >
std::__cxx11::messages<char>::do_get(std::messages_base::catalog, int, int, const String&) const' does not match any template declaration

note: saw 1 'template<>', need 2 for specializing a member function template


同样显示的错误在头文件 "locale_facets_nonio.h"的1971行中。
我试图在其他论坛中找到解决此问题的方法,但找不到满意的答案。
有人说我们完全不应该使用此文件 "std_lib_facilities.h",因为它使用的是不赞成或不合时宜的 header 。

最佳答案

we should not use this file "std_lib_facilities.h" at all as it is using deprecated or antiquated headers.



使用标准 header 时,应使用 #includestd_lib_facilities.h可能不同步。
#include<iostream>
#include "std_lib_facilities.h"
int main() {
std::cout<<"Hello world";
}

应该是
#include<iostream>
// #include "std_lib_facilities.h" Remove this entirely!
int main() {
std::cout<<"Hello world";
}

使用诸如 std::string之类的更多标准功能应为:
#include<iostream>
#include<string>
int main() {
std::string hello = "Hello world";
std::cout<<hello;
}

进一步扩展,阅读您的书籍示例中的 #include std_lib_facilities.h应该可能会扩展可编译和高效代码的实际必需的标准 header 。
这只是 Coliru使用的默认启动模板
#include <iostream>
#include <vector>

template<typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec)
{
for (auto& el : vec)
{
os << el << ' ';
}
return os;
}

int main()
{
std::vector<std::string> vec = {
"Hello", "from", "GCC", __VERSION__, "!"
};
std::cout << vec << std::endl;
}

当然可以收集到
#include <iostream>
#include <vector>

放在一个单独的头文件中,但是要与您的所有翻译单元保持同步(特别是与您所需的同步)会很麻烦。

另一个相关的问答:

Why should I not #include <bits/stdc++.h>?

关于c++ - “std_lib_facilities.h”显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60687841/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com