- Я делаю игровой двигатель в C ++, используя модули из C ++ 20. < /li>
Используя основной пример, двигатель структурирован так:содержит уникальный_ptr в классе B , класс B содержит регулярный указатель на класс A и уникальныйКод: Выделить всё
class A), где каждый содержит уникальный_ptr для более низких уровней и регулярный указатель на более высокие. /> Когда функция члена такого объекта, как C , пытается назначить c* d , я получаю еще одну ошибку, которая (перефразирование) говорит, что типы различны из -за правила одного определения (ODR)Код: Выделить всё
A>B>C>D
#include
import A;
import B;
import C;
int main() {
A a(3);
a.Create_B();
a.b->Create_C();
std::cout a = this;
}
};
< /code>
// B.cppm
module;
#include
class A;
export module B;
import C;
export class B {
public:
std::unique_ptr c;
A* a;
void Create_C() {
c = std::make_unique();
c->b = this;
c->value = a->value;
}
};
< /code>
// C.cppm
module;
class B;
export module C;
export class C {
public:
B* b;
int value;
};
< /code>
And a list of things I've tried:
- Forward definition in the global module fragment of each module
- Forward definition in each module
- Exporting the forward definition in each module
- Placing forward definitions in a header
- Placing forward definitions in an extra module
- Just using headers (works, but I'd rather not)
- Importing all modules (cries about circular dependancies)
- Putting the function definitions into a seperate .cpp file
Подробнее здесь: https://stackoverflow.com/questions/797 ... 20-modules