使用 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 中。