无法导入 C++ 模块

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 总是将其标记为错误

Gui*_*cot 5

您不能像这样将其包含在模块中。将头文件包含到模块中将使它的所有内容成为模块的一部分。由于您没有定义从包含中声明的标准库函数的实现,因此会导致链接错误。

您有两种标题选择。

第一种是使用全局模块片段:

module;
#include <iostream>
export module Object;

// ...
Run Code Online (Sandbox Code Playgroud)

第二种选择是使用标题单元:

export module Object;

import <iostream>
Run Code Online (Sandbox Code Playgroud)