【问题标题】:Can't link function time using modules in Visual Studio 2019无法使用 Visual Studio 2019 中的模块链接功能时间
【发布时间】:2020-11-15 11:32:07
【问题描述】:

使用以下 MCVE:

import std.core;

int main()
{
    __int64 t = time(nullptr);

    return 0;
}

我收到投诉

C:\...\main.cpp(9,1): error C2129: static function '__int64 time(__int64 *const )' declared but not defined

我正在编译 Debug/Win32。运行时库是/MDd。我有/std:c++latest/experimental:module 设置;命令行选项是

/JMC /experimental:module /permissive- /GS /analyze- /W3 /Zc:wchar_t /I"../../external/fmt-master/include" /ZI /Gm- /Od /Fd"Debug\vc142.pdb" /Zc:inline /fp:precise /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /std:c++latest /FC /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\modules.pch" /diagnostics:column

访问std::coutstd::stringsrandsin 没有问题。什么可以告诉 Visual Studio 也找到 time 函数?

【问题讨论】:

  • c++ 标准库没有收集到模块中。因此,无论 std.core 是什么,它都是 Visual Studio 提供给您的。所以你应该去寻找他们的文档。
  • 关于标准库对模块的支持的 Visual Studio 文档位于 docs.microsoft.com/en-us/cpp/cpp/modules-cpp?view=vs-2019。 “虽然 C++20 标准没有指定,但 Microsoft 允许将其 C++ 标准库的实现作为模块导入。”
  • 我猜这就是他们所说的“实验性”和“模块没有完全实现......”的意思。

标签: c++ visual-studio c++20 c++-modules


【解决方案1】:

std.core 提供 C++ 标准库中的所有其他内容。但是,从 Visual Studio 2019 版本 16.2 开始,Draft C++20 标准模块未在 Microsoft C++ 编译器中完全实现。您可以使用模块功能创建单分区模块并导入 Microsoft 提供的标准库模块。您可以参考此link 了解更多信息。

另外,您可以查看Overview of modules in C++ 了解如何创建模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2020-11-17
    • 2019-12-17
    • 2021-02-10
    • 2021-06-12
    • 2020-09-19
    • 2021-12-05
    相关资源
    最近更新 更多