gpt4 book ai didi

c++ - 导入模块的标准方式

转载 作者:行者123 更新时间:2023-12-03 07:01:04 26 4
gpt4 key购买 nike

我目前正在尝试在应该在 Windows (MSVC) 和 Linux (Clang 和/或 GCC) 上编译的代码中使用 c++ 模块。

我目前正在 Visual Studio 中进行开发,并使用“标准一致性模式”(/permissive-) 使我的代码尽可能可移植。

但是下面的代码:

import std.core;
int main()
{
std::cout << "Hello, World! haha" << std::endl;

std::vector<int> myVec{4};

std::map<std::string, size_t> myMap;

return 0;
}

无法使用/permissive- 标志进行编译。我收到以下错误:

E3223 Cound not find module file "std.core" for import

error C2664: 'int _CrtDbgReport(int,const char *,int,const char *,const char *,...)': cannot convert argument 4 from 'int' to 'const char *'



我认为“std.core”可能是一个仅限 Windows 的东西,所以我尝试了以下方法(我在很多例子中都看到了):
import <iostream>;
import <vector>;
import <map>;

但它会导致以下错误:

error C7612: could not find header unit for 'PATH_TO_VS\include\iostream'

error C7612: could not find header unit for 'PATH_TO_VS\include\vector'

error C7612: could not find header unit for 'PATH_TO_VS\include\map'



注意:PATH_TO_VS\include 中实际上有名为“iostream”、“vector”和“map”的文件。

因此我想知道导入 c++ 模块的标准方法是什么?如果“import std.core”是标准方式,为什么不使用/permissive- 编译?

我正在使用 Visual Studio 2019(社区)和 CMake。

编辑:

对不起,我忘了告诉我的编译器标志:
/experimental:module
/std:c++latest
/W4
/WX
/permissive-
/MDd
/EHsc

代码在没有/permissive- 的情况下编译,但在设置时不会编译。我不知道为什么

最佳答案

根据 Microsoft Docs,导入 header 尚未实现。见 https://docs.microsoft.com/en-us/cpp/cpp/modules-cpp?view=msvc-160#imported-header-files .
您可以在此处关注此功能的进展:https://github.com/microsoft/STL/issues/60 .
您可以使用 import std.core; Visual Studio 2019 中的语法(我使用 v16.8+ 对此进行了测试),但您还需要在 Visual Studio 安装程序中安装“ C++ Modules for v142 build tools ”组件才能正常工作。
此外,您将需要启用以下标志:

  • /std:c++latest
  • /experimental:module

  • this answer 中所述.
    你可能还会得到一些 C5050导入 std.core 时有关不兼容环境的警告模块:
    1>C:\Test\C++\Modules\main.cpp(1,16): warning C5050: Possible incompatible environment while importing module 'std.core': _GUARDOVERFLOW_CRT_ALLOCATORS=1 is defined in current command line and not in module command line
    1>C:\Test\C++\Modules\main.cpp(1,16): warning C5050: Possible incompatible environment while importing module 'std.core': _DEBUG is defined in current command line and not in module command line
    1>C:\Test\C++\Modules\main.cpp(1,16): warning C5050: Possible incompatible environment while importing module 'std.core': _M_FP_PRECISE is defined in current command line and not in module command line
  • 解决第一次警告更改 SDL 检查 没有 (/sdl-)。
  • 要解决第二个警告,请删除 _DEBUG预处理器定义。
  • 要解决第三个警告,请删除 的值。浮点型 (在我的例子中,默认设置为 /fp:percise)。
  • 关于c++ - 导入模块的标准方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59447206/

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