我正在尝试将模块实现的部分内容拆分为一个单独的源文件作为模块实现单元:
香蕉.cppm
export module banana;
export int banana();
banana.impl.cppm
module banana;
int banana() {
return 42;
}
Visual Studio 抱怨此代码并发出警告 C4844:
1> 香蕉.impl.cppm(1,14): 警告 C4844: '导出模块香蕉;'是 现在是声明模块接口的首选语法
这是怎么回事?我怎样才能摆脱这个警告?
Visual C++ 认为你的模块实现单元是模块接口单元。
发生这种情况有两种可能的方式:
/interface
编译选项来编译模块实现源文件。右键单击源文件并转到 Properties->Configuration Properties->C/C++->Advanced->Compile As
并确保其 not 设置为 Compile as C++ Module Code (/interface)
。如果您使用 CMake 生成 Visual Studio 解决方案,请从 CXX_MODULES
FILE_SET
中删除模块实现源。.ixx
或 .cppm
)作为模块实现源文件。 Visual Studio 自动将它们视为模块接口。使用 /TP
编译选项覆盖此设置(将上面的 Compile As
属性设置为 Compile As C++ Code (/TP)
)或将文件扩展名更改为非模块文件扩展名,例如 .cpp
。我强烈建议更改文件扩展名,因为其他编译器类似地为模块文件扩展名分配特殊含义。i似乎有两种方法可以让您的示例发挥作用: