Я определенно в отчаянном случае … Используя C ++, я определил эти два класса:
// Console.hpp
#ifndef CLASS_Console
#define CLASS_Console
#include <iostream>
#include "Window.hpp"
class Console
{
public:
Window *Win;
Console(Windows *Win); // Which then does "this->Win = Win;"void AppendText(std::string);
// And some more dozens functions
};
#endif
// Window.hpp
#ifndef CLASS_Window
#define CLASS_Window
#include <iostream>
#include "Size.hpp"
class Window
{
private:
Console *m_Console;
public:
Window(); // Which then does "m_Console = new Console(this); m_Console->AppendText("YEAH");"Console *getConsole(); // For use by another classes
Size getSize();
// And some more Tens and Tens of functions
};
#endif
Сначала скажут: «Используйте предварительную декларацию!»
Но учитывая, что мне нужно получить доступ к ряду этих десятков функций (в одну и в другую сторону), можно ли как-нибудь избежать использования предварительного объявления?
Спасибо за ваши (будущие) ответы!
Но учитывая, что мне нужно получить доступ к ряду этих десятков функций (в одну и в другую сторону), можно ли как-нибудь избежать использования предварительного объявления?
Я не уверен, что вы понимаете, что делает предварительная декларация. Вам нужно только предоставить один предварительная декларация в window.hpp
за Console
, а затем включить console.hpp
от window.cpp
,
Нет, нет способа избежать (по крайней мере) предварительного заявления.
Но учитывая, что мне нужно получить доступ к ряду этих десятков функций
Почему это имеет значение? Спектакль? Вы что-нибудь уже измерили? Если нет, вы не можете говорить о производительности.
Нормальная структура:
class Console;
class Window { Console *c; ...};
class Console { Window *w; ... };
Console::Console() { ... } ...
Первого объявления класса достаточно, чтобы вы могли написать определение другого класса (без определения функций-членов).
Затем после определений обоих классов функции-члены объявляются, поэтому код для функций-членов может по мере необходимости использовать члены другого класса.
Если только один из этих классов должен быть доступен извне, вы можете подумать о вложении Консоли в Window (или наоборот).