【发布时间】:2022-01-13 17:34:54
【问题描述】:
ImageLoader.cpp // 错误:'SafeReleaseM' 的 E3344 模块文件映射无效
import SafeReleaseM;
import <wincodec.h>;
import <d2d1.h>;
class ImageLoader{};
SafeReleaseM.ixx
export module SafeReleaseM;
export template <class T> void SafeRelease(T** type)
{
if (*type)
{
(*type)->Release();
*type = NULL;
}
}
我已将标准设置为最新的 C++ 标准和 C 标准,将我的源文件夹添加到模块依赖目录,启用扫描模块。
在我看来,这是一个非常基本的模块测试,我做错了什么吗?我是 S.O 的新手,所以如果我应该添加其他设置信息,请告知。
编辑:我正在使用 Visual Studio 2022 社区 (msvc)
编辑#2:在一个单独的项目中,类似的方法可以导出模板函数。也许我的项目配置有问题。
【问题讨论】:
-
ImageLoader.cpp 正在构建什么模块?因为您不能从不是本身模块的源文件导入模块。另外,您使用的是什么编译器和构建工具?
-
@NicolBolas 你是说“ImageLoader.cpp”本身必须是一个模块才能导入“SafeReleaseM.ixx”吗? “ImageLoader”是一个包含加载图像逻辑的文件。它导入“SafeReleaseM”以使用安全释放指针的 [SafeRelease] 模板函数。另外,我正在使用带有 VS 2022 的 msvc
-
其实没有;我误读了标准中的某些内容。
-
在进一步测试模块后,我发现我在尝试使用模板函数时得到了这个,但不是 int/char/normal void:
-
您应该在问题中添加有效和无效的特定代码。
标签: c++ import module export c++20