我是C++的新手。我正在尝试将当前日期和时间存储为字符串变量。
在this question中,我找到了答案,并安装了date.h
库。
然而,当我尝试使用提供的代码时,我遇到了错误:
命名空间“std”没有成员“format”
尽管在脚本的顶部有#include <format>
。
我该怎么解决这个问题?
我在Windows 10上使用Visual Studio 2022,如果有帮助的话。
下面是我的代码:
#include <iostream>
#include <chrono>
#include <date.h>
#include <type_traits>
#include <format>
int main()
{
std::cout << "The current time is ";
auto start_time = std::format("{:%F %T}", std::chrono::system_clock::now());
static_assert(std::is_same_v<decltype(start_time), std::string>{});
std::cout << start_time << "\n";
}
5条答案
按热度按时间n3schb8v1#
std::format
在C20标准中被添加到C中。除非使用C++20编译,否则不会有std::format
。nhaq1z212#
截至2021年12月,
std::format
和其他一些C++20
工具仅在Visual Studio 2019和2022中的/std:c++latest
模式下可用。Here is a quote:
作为实现C20的一部分,有一些后来的发现需要通过标准委员会的缺陷报告(DR)过程对ISO C20标准进行更改。这些功能的现有实现(pre-DR)在/std:clatest开关下可用。我们也在跟踪DR,并在/std:clatest下实现这些问题解决方案。我们的计划是在完成全套标准库DR的实现后,在/std:c++20开关下提供这些功能。
当Microsoft完成实施所有DR时,
std::format
将在/std:c++20
交换机下可用。6ss1mwsb3#
对于那些遇到这个问题的人,使用GCC或clang。编译器仅部分支持c++20 https://en.cppreference.com/w/cpp/compiler_support/20中的所有新模块。
tquggr8v4#
格式化作为std的一部分目前只在clang和MSVC上实现。因此,要使其在其他编译器(如g,apple clang)上工作,请使用fmt,这是format的实现。
下载
fmt
包,将其与您的文件沿着放入src
文件夹,并在编译时包含它,同时指定您使用的是c++ 20。你可以这样使用它作为参考:
r1zhe5dt5#
张贴在这里,因为这是在谷歌的顶部结果“错误C2039:'format_string':不是'std'的成员“。以防其他人有同样的问题。
所以这和最初的问题不完全一样。在我的例子中,
std::format
在VS2022中工作得很好,但不是std::format_string
或std::wformat_string
。我在网上尝试了所有的建议和解决方案,但最终发现这是因为在旧版本的MSVC(14.34.31933)中,
format
头部用不同的名称实现了该功能:但在最新版本(14.36.32532)中,它已更改为
format_string
。