【发布时间】:2020-04-14 06:19:18
【问题描述】:
我目前正在尝试在应在 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 找不到要导入的模块文件“std.core”
错误 C2664: 'int _CrtDbgReport(int,const char *,int,const char *,const char *,...)': 无法将参数 4 从 'int' 转换为 'const char *'
我认为“std.core”可能是一个仅限 Windows 的东西,所以我尝试了以下方法(我在很多示例中都看到过):
import <iostream>;
import <vector>;
import <map>;
但是会导致如下错误:
错误 C7612:找不到标头单元 'PATH_TO_VS\include\iostream'
错误 C7612:找不到标头单元 'PATH_TO_VS\include\vector'
错误 C7612:找不到 '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- 的情况下编译,但在设置时不会编译。我不知道为什么
【问题讨论】:
-
std.core不是 Windows 的东西。 -
只有
import<>语法是标准库的 C++20 的一部分。 (用户编写的模块可以通过import foo;使用。)
标签: c++ c++20 c++-modules