无法导入 C++ 模块

Unable to Import C++ Modules

我正在尝试使用模块在 C++ 20 中重建我的项目以减少依赖性和编译时间。我尝试导入一些模块,我能够这样做,但是 Visual Studio 将导入语句标记为未定义:"Could not find module file for..."。虽然它标记为错误,但我仍然能够编译和 运行 导入的函数(尽管它不允许我编译一个函数,如果它需要一个单独的 #include 只在模块中找到但不是它导入的 .cpp 文件,给我一个链接器错误)。我密切关注 Microsoft 的文档,并能够在早期项目中使用模块,并且从未遇到过任何这些问题,并且我确保在该项目中重新建立相同的配置,但这种情况发生了。

我不太确定我还能提供哪些其他信息,但请询问是否需要。任何帮助将不胜感激

配置:

有效

import Object;

#include <iostream>

int main() {
    calc(1, 5);
}
export module Object;

export int calc(int a, int b) {
    return a + b;
}

不起作用

import Object;

#include <iostream>

int main() {
    calc(1, 5);
}
export module Object;

#include <iostream>

export int calc(int a, int b) {
    return a + b;
}

如您所见,存在多个链接错误:

无论哪种方式,VS 都会将其标记为错误

编辑 通过将 #include 放在代码编译的模块导出语句上方,但 VS 仍将其标记为错误。虽然导入 headers 如 <iostream> 或导出 类 不起作用。所以我可以编译,但只能编译某些东西,VS 总是将其标记为错误

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

headers 你有两个选择。

首先是使用全局模块片段:

module;
#include <iostream>
export module Object;

// ...

第二种选择是使用header个单位:

export module Object;

import <iostream>