无法导入 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>
我正在尝试使用模块在 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>