Its*_* Me 6 c++ import module c++20
我正在尝试使用模块在 C++ 20 中重建我的项目,以减少依赖性和编译时间。我尝试导入一些模块,并且可以这样做,但 Visual Studio 将导入语句标记为 undefined: "Could not find module file for..."。尽管它将其标记为错误,但我仍然能够编译并运行导入的函数(尽管如果它需要#include仅在模块中找到的单独函数而不是它导入到的 .cpp 文件,则它不允许我编译函数,给我一个链接器错误)。我密切关注微软的文档,并且能够在早期项目中使用模块,并且当时从未遇到过任何这些问题,并且我确保在该项目中重新建立相同的配置,但这种情况发生了。
我不太确定我还能提供哪些其他信息,但请询问是否有必要。任何帮助,将不胜感激
作品
import Object;
#include <iostream>
int main() {
calc(1, 5);
}
Run Code Online (Sandbox Code Playgroud)
export module Object;
export int calc(int a, int b) {
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
不起作用
import Object;
#include <iostream>
int main() {
calc(1, 5);
}
Run Code Online (Sandbox Code Playgroud)
export module Object;
#include <iostream>
export int calc(int a, int b) {
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,VS都会将其标记为错误
编辑
通过将#include上面的模块导出语句放在代码中,代码可以编译,但 VS 仍然将其标记为错误。尽管导入标头(例如<iostream>或导出类)不起作用。所以我能够编译,但只能编译某些东西,并且 VS 总是将其标记为错误
您不能像这样将其包含在模块中。将头文件包含到模块中将使它的所有内容成为模块的一部分。由于您没有定义从包含中声明的标准库函数的实现,因此会导致链接错误。
您有两种标题选择。
第一种是使用全局模块片段:
module;
#include <iostream>
export module Object;
// ...
Run Code Online (Sandbox Code Playgroud)
第二种选择是使用标题单元:
export module Object;
import <iostream>
Run Code Online (Sandbox Code Playgroud)