我有3个文件,即engineering.cpp、engineering.ixx和system.ixx。简要内容如下:
system.ixx:
export module sys;
export import :engineering;engineering.ixx
module;
#include <string>
#include <vector>
export module sys:engineering;
namespace sys::engineering
{
export class Psychrometry
{
//more code here
}
}engineering.cpp
module;
#include <sstream>
module sys:engineering;
namespace sys::engineering
{
//implementation of the class
}在另一个cpp文件中,我将它用作:
import sys;
sys::engineering::Psychrometry psy;该项目编译和工作良好,但是在engineering.cpp中,intellisense会给出99+错误和代码完成,以及其他基本功能不起作用。
但是,如果我对engineering.cpp做了以下更改
//instead of module sys:engineering
module sys;现在intellisense运行良好,该项目仍在编译和工作。然而,据我理解,第一种方法(模块sys:engineering)是正确的,而不是(模块sys)。
我遗漏了什么?提前谢谢。
(Visual Studio Community 2022 (64位)-当前版本17.2.6)
发布于 2022-07-30 13:37:47
两个模块单元不能使用相同的模块分区名称。因此,sys:engineering不能在两个模块单元中使用。不需要诊断,这就是您没有得到编译错误的原因。
此外,如果engineering.cpp要成为模块实现分区,那么如果要使用模块接口导出的任何声明,则必须显式导入模块。非分区实现单元自动导入模块接口.
使模块实现单元成为分区的唯一原因是如果您想要将该文件导入到其他地方(可能是为了共享模块内部的声明)。否则,只需将它们设置为非分区实现单元。
https://stackoverflow.com/questions/73175951
复制相似问题