Как я могу сгладить круглую зависимость, используя модули C ++ 20?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как я могу сгладить круглую зависимость, используя модули C ++ 20?

Сообщение Anonymous »


[*] Я делаю игровой двигатель в C ++, используя модули из C ++ 20. < /li>
Используя основной пример, двигатель структурирован так: содержит уникальный_ptr в классе B , класс B содержит регулярный указатель на класс A и уникальный), где каждый содержит уникальный_ptr для более низких уровней и регулярный указатель на более высокие. /> Когда функция члена такого объекта, как C , пытается назначить C* d , я получаю еще одну ошибку, которая (перефразирование) говорит, что типы различны из -за правила одного определения (ODR)
[*]

Вот минимальный воспроизводимый пример с тремя классами (A, B и C): < /p>
// main.cpp
#include

import A;
import B;
import C;
import C_Override;

int main() {
A a(3);
a.Create_B();
a.b->Create_C();

std::cout a = this;
}
};
< /code>
// B.cppm
module;

class A;

export module B;

import ;
import ;
import C;

export class B {
public:
std::vector c;

A* a;

template
void Create_C() {
c.push_back(std::make_unique());
c.back()->b = this;
c.back()->value = a->value;
}
};
< /code>
// C.cppm
module;

class B;

export module C;

export class C {
public:
B* b;

int value;

virtual void Do_Something() = 0; // This function will be overloaded
};
< /code>
export module C_Override

import ;

export class C_Override {
public:
void Do_Something() override {
std::cout

Подробнее здесь: https://stackoverflow.com/questions/797 ... 20-modules
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»