Как решить циклическую зависимость?
Моя проблема в том, что у меня есть global_variables.ч файл, который должен знать о файлах :
- Отладчика.ч
- Окна.ч
- Входные.ч
Моя проблема заключается в этом вводе.h должен знать о Window.h, и должен использовать несколько его функций, и поэтому он также нуждается в файле global_variables.h, И теперь я столкнулся с циклической зависимостью.
Причина, по которой я использую файл Global_Variables.h, заключается в том, что я знал, что многие файлы должны будут получить доступ к моим различным компонентам игрового движка, поэтому я бросил их в файл Global_Variables.h, что поначалу казалось хорошей идеей.
Но, поскольку я новичок, я не думал об этой проблеме, с которой я сейчас сталкиваюсь. :/
Вот несколько примеров кода :
Global_Variables.ч :
#pragma once #include "Debugger.h" #include "Window.h" #include "Input.h" // The name of the game the engine is currently running. static const std::string GAME_NAME = "SwEngine Testing"; // The debugging/logging and also error handling component of the engine. static Debugger global_debugger; // The window/rendering/graphics component of the engine. static Window global_window; // The input component of the engine. // Handles events such as window closing, keyboard pressing and mouse moving. static Input global_input;
А входной класс создается заново, имеет только деструктор и конструктор, а также некоторые комментарии.
Итак, как я должен решить эту проблему? :)
Что я уже пробовал:
Я пробовал гуглить, но на самом деле не нашел никаких хороших ответов о том, как решить эту проблему.
Так что я еще ничего толком не пробовал.
Philippe Mori
Global_variables. h-плохая идея. Это вызовет много перекомпиляции, так как будет использоваться везде и зависит от многих файлов. Каждая переменная должна быть объявлена в соответствующем заголовочном файле, чтобы, скажем, изменение в отладчике повлияло только на исходные файлы, которые зависят от отладчика.
Philippe Mori
Прямые объявления и соответствующее разделение файлов могут помочь избежать циклов.