首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual 2022 -模块(智能感知错误)

Visual 2022 -模块(智能感知错误)
EN

Stack Overflow用户
提问于 2022-07-30 13:18:49
回答 1查看 311关注 0票数 1

我有3个文件,即engineering.cpp、engineering.ixx和system.ixx。简要内容如下:

system.ixx:

代码语言:javascript
复制
export module sys;
export import :engineering;

engineering.ixx

代码语言:javascript
复制
module;

#include <string>
#include <vector>

export module sys:engineering;

namespace sys::engineering
{

    export class Psychrometry
    {
       //more code here
    }
}

engineering.cpp

代码语言:javascript
复制
module;

#include <sstream>

module sys:engineering;

namespace sys::engineering
{
     //implementation of the class
}

在另一个cpp文件中,我将它用作:

代码语言:javascript
复制
import sys;
sys::engineering::Psychrometry psy;

该项目编译和工作良好,但是在engineering.cpp中,intellisense会给出99+错误和代码完成,以及其他基本功能不起作用。

但是,如果我对engineering.cpp做了以下更改

代码语言:javascript
复制
//instead of module sys:engineering
module sys;

现在intellisense运行良好,该项目仍在编译和工作。然而,据我理解,第一种方法(模块sys:engineering)是正确的,而不是(模块sys)。

我遗漏了什么?提前谢谢。

(Visual Studio Community 2022 (64位)-当前版本17.2.6)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-30 13:37:47

两个模块单元不能使用相同的模块分区名称。因此,sys:engineering不能在两个模块单元中使用。不需要诊断,这就是您没有得到编译错误的原因。

此外,如果engineering.cpp要成为模块实现分区,那么如果要使用模块接口导出的任何声明,则必须显式导入模块。非分区实现单元自动导入模块接口.

使模块实现单元成为分区的唯一原因是如果您想要将该文件导入到其他地方(可能是为了共享模块内部的声明)。否则,只需将它们设置为非分区实现单元。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73175951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档