oop — переполнение стека трех взаимосвязанных объектов

У меня есть три класса, класс Actor, класс Cell и класс Behavior. Класс Actor создает экземпляр подкласса Behavior (определенный в заголовочном файле Behavior). Поведение использует методы для анализа векторов указателей на акторы и векторов указателей на ячейки. Клетки имеют методы, которые анализируют векторы указателей на Cells, и они содержат векторы указателей на Actors. О, да, и в заголовочном файле Actor есть перечислимый тип данных Heading, каким-то образом используемый всеми классами. (включается объявлением типа данных extern enum Heading в каждом файле, который включает Actor).

Я получил большую часть кода, но столкнулся с камнем преткновения, когда получил огромный список ошибок, связанных с включениями и рекурсивными включениями, и потратил на это много часов. Я мог бы помочь, выяснив, как лучше расположить эти объекты, чтобы они работали вместе.

Итак, еще раз:

Actor:    Behavior
Behavior: vector of pointers to Cells, vector of pointers to Actors
Cells:    vector of pinters to Cells, vector of pointers to Actors
Heading:  Enumerated, declared extern in all classes, currently stored in Actor.

Любой совет относительно того, как идти о том, какие заголовочные файлы, где? Я перепробовал много разных вариантов различных предварительных деклараций, включений и т. Д. Я, честно говоря, не знаю, куда идти сейчас.

Спасибо!

Изменить: Обновлены мои файлы классов и заголовков.

Actor: Move, Heading
Move:  Behavior Heading
Behavior: Cell, Actor  Heading
Cell: Cell, Actor  Heading
Heading:   Used by all.

Как есть, вот что включено:

Behavior.h:  Forward declarations of Cell and Actor
Behavior.cpp:  Includes Behavior.h, Cell.h, Actor.h
Cell.h:   Forward Declaration of Actor
Cell.cpp:   includes Cell.h, Heading.h, Actor.h
Actor.h:   Includes Behavior.h, Heading.h.
Actor.cpp:   includes actor.h
Move.h: Includes Behavior.h, Heading.h
Move.cpp: Includes move.h, Heading.h, Cell.h, Actor.h
Heading: Includes nothing, declares nothing.

Практически единственная ошибка, связанная с включением, которую я вижу, это то, что экземпляр Move в файле Actor.h имеет неполный тип.

Редактирование # 2: Добавлены включения для Behavior и Move в actor.cpp и удалены из actor.h, и я обратился к созданию указателя, и он кашлянул и зарычал на меня, но он успешно сработал. Спасибо за помощь ребята!

0

Решение

Пока единственной зависимостью является указатель, просто используйте forward decl. С этим правилом только include предназначен для actor.h для включения поведения.h и заголовка.h

поведение.h -> объявить ячейки и актеры
Cells.h -> объявить актеров

Поведение и ячейки cpp должны будут включать заголовочные файлы объявленных вперед классов.

поведение.cpp -> включают в себя Cells.h и Actors.h
Cells.cpp -> includectors.h

1

Другие решения

Чтобы облегчить осложнения, переместите заголовок к собственному заголовку. Защитите его, конечно, включенным охранником. Затем используйте предварительную декларацию Actor а также Behavior в Cells и т.п.

0

По вопросам рекламы [email protected]