繁体   English   中英

无法导入 C++ 模块

[英]Unable to Import C++ Modules

我正在尝试使用模块在 C++ 20 中重建我的一个项目,以减少依赖关系和编译时间。 我尝试导入一些模块,并且我能够这样做,但 Visual Studio 将导入语句标记为未定义: "Could not find module file for..." 尽管将其标记为错误,但我仍然能够编译和运行导入的函数(尽管它不允许我编译 function,如果它需要仅在模块中找到的单独#include而不是它的 .cpp 文件导入到,给我一个 linker 错误)。 我密切关注 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 总是将其标记为错误

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

标题有两种选择。

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

module;
#include <iostream>
export module Object;

// ...

第二种选择是使用 header 单元:

export module Object;

import <iostream>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM