【发布时间】:2021-07-27 07:02:56
【问题描述】:
我正在尝试使用模块在 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 仍将其标记为错误。尽管导入诸如<iostream> 之类的标头或导出类都不起作用。所以我可以编译,但只能编译某些东西,VS总是将其标记为错误
【问题讨论】:
-
您应该提供minimal reproducible example。在这种情况下,您正在使用的文件和构建设置。
-
我确保启用实验模块功能并选择最新的 C++ 标准。问题是,我今天早些时候在一个项目中使用了完全相同的构建设置来测试模块并且它有效,但我似乎无法复制它
-
如果您无法复制该问题,这意味着我们也无法复制,如果您不显示您正在使用的设置,则绝对不会。
-
好的,这里是语言配置页面
-
@ItsMe 我编辑了问题以包含代码。您无法在谷歌上搜索图像,并且在可能有文字的情况下阅读图像并不有趣。如果您还可以将链接错误的编译器输出而不是最后一个图像,那就太好了。