С++20 циклическое импортирование модулей

Когда я в модуле A импортирую модуль B, а в модуле B импортирую модуль A, у меня возникает ошибка: введите сюда описание изображения

Вот сам код: Module1:

export module Module1;

import Module;

export class B
{
public:
    void foo()
    {
        A a;
        a.foo();
    }
};

Module:

export module Module;

import Module1;

export class A
{
public:
    void foo()
    {
        B b;
        b.foo();
    }
};

main:

import Module;

int main()
{
    A a;
    a.foo();
    return 0;
}

Есть ли какой-нибудь способ сделать такое импортирование, когда 2 модуля зависят друг от друга?


Ответы (1 шт):

Автор решения: Никита Самоуков

ClassA.ixx

export module ClassA;

export class A
{
public:
    void bar();
};

ClassA.impl.ixx

import ClassA;
import ClassB;

void A::bar(){
    B b;
    b.foo();
}

ClassB.ixx

export module ClassB;

import ClassA;

export class B
{
public:
    void foo()
    {
        A a;
        a.bar();
    }
};

Test.ixx

export module Test;

import std.core;
using namespace std;

import ClassA;

export int main()
{
    A a;
    a.bar();
}

Произведёт SO.

→ Ссылка