У меня есть 2 файла, которые используют друг друга в них, поэтому я пытаюсь включить каждый из них в каждый файл, что не работает, потому что файлы будут включать в себя сами. Я попытался помещать соответствующие инструкции include внутри защитников заголовков, но это заставляет компилятор думать, что все имена переменных являются идентификаторами типа.
Вот то, что у меня есть, когда оно внутри защитников заголовка
//MenuItem.h
#include <SDL.h>
#include <string>
#ifndef MENU_ITEM_H //avoid multiple inclusion
#define MENU_ITEM_H
#include "window.h"
class MenuItem {
bool selected = false;
window containerWindow;
etc
Window.h включает в себя MenuItem.h внутри защиты заголовка.
В MenuItem.h я получаю такие ошибки, как
Error 1 error C2146: syntax error : missing ';' before identifier 'containerWindow'
Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Когда у меня они есть у внешних охранников (например, так)
//MenuItem.h
#include <SDL.h>
#include <string>
#include "window.h"
#ifndef MENU_ITEM_H //avoid multiple inclusion
#define MENU_ITEM_H
class MenuItem {
bool selected = false;
window containerWindow;
etc
Я получаю следующее
Error 1 error C1014: too many include files : depth = 1024
Я не знаю, как я могу это исправить.
Избегайте циклического включения с помощью форвардного объявления: используйте указатель window
в своем классе MenuItem
вместо объекта.
Заменить:
#include "window.h"
class MenuItem {
bool selected = false;
window containerWindow;
etc
От:
class window; // or struct window if window is a struct
class MenuItem {
bool selected = false;
window* containerWindow;
etc
Кроме того, как прокомментировано, убедитесь, что #ifdef
имеет #endif
, но я не думаю, что это вызывало проблему, о которой вы сообщали.
#endif
я подозреваю?