微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 c++20 模块的“循环依赖”错误

如何解决使用 c++20 模块的“循环依赖”错误

我试图在另一个模块中包含一个模块,但由于以下错误我无法编译:

"无法构建以下源文件,因为存在循环 它们之间的依赖: Module1.ixx 依赖 Module2.ixx 依赖 模块 1.ix。"

我试过的代码

// Module1.ixx
export module Module1;
import Module2;
export class modClass1_
{
public:
    modClass1_() {};
    ~modClass1_() {};
    int getV() { return V; };
    int getotherModuleV() { modClass2_ mc2; return mc2.V; };
    int V = 1;
};
// Module2.ixx
export module Module2;
import Module1;
export class modClass2_
{
public:
    modClass2_() {};
    ~modClass2_() {};
    int getV() { return V; };
    int getotherModuleV() { modClass1_ mc1; return mc1.V; };
    int V = 2;
};

任何帮助/建议将不胜感激。

环境:Visual Studio 2019 | MSVC-2019 | C++20 | Windows 10 专业版

解决方法

创建没有循环依赖的模块接口单元

模块接口单元在用途上与头文件有些相似。

模块接口单元中有 export module。主模块接口单元没有分区名称。

{ modClass2_ mc2; return mc2.V; }; 主模块接口单元中移除 export Module1; 的实现,在 Module1模块实现单元中执行此操作,并包含 {{1}

import Module2;

并且循环依赖被打破了。

,

如果 A 导入 B,则不能在模块 B 中导入模块 A

为了解决这个问题,您必须以某种方式不在 A 中导入 B BA 中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?