У меня есть три класса, класс 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, и я обратился к созданию указателя, и он кашлянул и зарычал на меня, но он успешно сработал. Спасибо за помощь ребята!
Пока единственной зависимостью является указатель, просто используйте forward decl. С этим правилом только include предназначен для actor.h для включения поведения.h и заголовка.h
поведение.h -> объявить ячейки и актеры
Cells.h -> объявить актеров
Поведение и ячейки cpp должны будут включать заголовочные файлы объявленных вперед классов.
поведение.cpp -> включают в себя Cells.h и Actors.h
Cells.cpp -> includectors.h
Чтобы облегчить осложнения, переместите заголовок к собственному заголовку. Защитите его, конечно, включенным охранником. Затем используйте предварительную декларацию Actor
а также Behavior
в Cells
и т.п.