我正在尝试使用模块在 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 …
我有一个通用的 C++ 问题。
假设我有这个代码:
int& GetInt()
{
int* num = new int();
return *num;
}
int numCopy = GetInt();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,返回的引用会发生什么?这个例子使用了一个简单的数据结构,所以它并不重要,但是在返回的数据更复杂的情况下,将变量分配给堆分配的变量引用,像这样将数据numCopy完全复制,或者将numCopy成为另一个参考原文num?