Visual Studio 2019:如果不先在单独的模块(Ixx)中导入cpp文件中的C++标准库声明,则无法将其`导入
尝试使用C++20import
命令加载.cpp文件中的标准库声明时,返回编译器错误,指出找不到";头单元";。
例如,在一个文件中,假设Main.cpp,我将
import <iostream>;
int main()
{
return 0;
}
以下编译器错误结果:
error C7612: could not find header unit for 'C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133includeiostream'
但是,如果我向项目添加一个模块,比如Test.ixx,如下所示
export module Test;
import <iostream>;
然后将模块Test
导入Main.cpp:
import Test;
import <iostream>;
int main()
{
return 0;
}
那么,没问题。代码构建得很好。
这只是C++20编译器实现仍在研究的一个例子吗?到目前为止,我的印象是标准库头应该是无条件可导入的--即不需要在其他模块中使用import
--但是我最近才开始尝试C++20中的新功能。
注意:我也尝试过使用其他标准库声明,例如<vector>
ETC,结果相同。
解决方案
在C++20中未指定导入STL,但VS允许通过执行
import std.core;
https://docs.microsoft.com/en-us/cpp/cpp/modules-cpp?view=msvc-160中的代码段
虽然C++20标准没有指定,但Microsoft允许将其C++标准库的实现作为模块导入。通过将C++标准库作为模块导入,而不是通过头文件将其包含在#中,您可能会根据项目的大小加快编译时间。该库被组件化为以下模块:
std.regex提供标头<;regex>;的内容
std.filessystem提供标头<;filesystem>;
的内容 std.memory提供标头<;memory>;的内容
标准线程提供标头<;原子&>、<;条件_变量&>、<;未来>;、<;互斥&>、<;共享_互斥&>和<;线程&>的内容 std.core提供了C++标准库中的所有其他功能
若要使用这些模块,只需将导入声明添加到源代码文件的顶部。
相关文章