Название: Почему компилятор не видит заинклюденный класс? Отправлено: xintrea от Декабрь 06, 2015, 21:53 Есть вот такой простой класс:
Код
При его компиляции вылезают ошибки, что неизвестен класс Editor. Но я же его инклюдю, чего еще надо то? Ошибки следующие: Код: In file included from ../mytetra/src/libraries/wyedit/Editor.h:19:0, Пробовал не инклюдить, а прописывать предварительное описание класса через служебное слово class. А инклюд размещал не в заголовке, а в реализации. Проблема все равно остается. Репозитарий: https://github.com/xintrea/mytetra_dev/commits/editorModification (https://github.com/xintrea/mytetra_dev/commits/editorModification) Коммит: Код: fc543909e727ee9dd4bccbeaa856512fbfae8f58 Как избавиться от этой ошибки? ЗЫЖ После исправления, там скорее всего будут другие ошибки, потому что много чего переделал относительно предыдущего коммита. Но мне бы избавиться от той что в топике. Название: Re: Почему компилятор не видит заинклюденный класс? Отправлено: Old от Декабрь 06, 2015, 22:03 Насколько я вижу, у вас циклическое включение.
Форматер включает редактор, а редактор включает форматер. Название: Re: Почему компилятор не видит заинклюденный класс? Отправлено: Old от Декабрь 06, 2015, 22:07 Уберите из Editor include с formatters.h, он там не нужен.
Название: Re: Почему компилятор не видит заинклюденный класс? Отправлено: xintrea от Декабрь 06, 2015, 23:41 Вообще то нужен. В Editor будут создаваться экземпляры классов-форматтеров. Это еще не дописано, просто мне сейчас бы добиться компиляции.
Я уже нашел ошибку - у меня прописано "Editor editor;", а надо же было указатель: "Editor *editor;". Но теперь залипуха с friend- классами. Я не могу их объявлять через предварительное объявление. Приходится их инклюдить. И вылезает такая ошибка: Код: ../mytetra/src/libraries/wyedit/formatters/TypefaceFormatter.cpp Коммит: Код: 0cc340434af62d2612f61439dcbd4da248cca005 Название: Re: Почему компилятор не видит заинклюденный класс? Отправлено: panAlexey от Декабрь 07, 2015, 00:03 Не уверен, что именно такая ошибка у меня была, но нечто подобное.
Сделал один xxxxx.h куда включил все классы и инклюдил его, а не заголовки нужных классов. Ошибка ушла. Теперь всегда так и делаю. Название: Re: Почему компилятор не видит заинклюденный класс? Отправлено: xintrea от Декабрь 07, 2015, 01:11 Не уверен, что именно такая ошибка у меня была, но нечто подобное. Сделал один xxxxx.h куда включил все классы и инклюдил его, а не заголовки нужных классов. Ошибка ушла. Теперь всегда так и делаю. По-моему, это неправильно. Если объект большой, то компиляция будет реально медленной с таким подходом. Я уже это проходил. Теперь в заголовочных файлах стараюсь вообще не использовать инклюд, а только предварительные объявления классов. Иначе упаришься ждать завершения компиляции и линковки. Блин, я так и не осилил последнюю ошибку. Название: Re: Почему компилятор не видит заинклюденный класс? Отправлено: Archan_gel от Декабрь 07, 2015, 15:57 Добавь в .h файлы
class Editor; .... а в .cpp файлы заинклудь. и так же по анологи сделай в реализации Editor class Formatter; и т.д. Название: Re: Почему компилятор не видит заинклюденный класс? Отправлено: panAlexey от Декабрь 22, 2015, 16:32 Не уверен, что именно такая ошибка у меня была, но нечто подобное. Сделал один xxxxx.h куда включил все классы и инклюдил его, а не заголовки нужных классов. Ошибка ушла. Теперь всегда так и делаю. По-моему, это неправильно. Если объект большой, то компиляция будет реально медленной с таким подходом. Я уже это проходил. Теперь в заголовочных файлах стараюсь вообще не использовать инклюд, а только предварительные объявления классов. Иначе упаришься ждать завершения компиляции и линковки. Блин, я так и не осилил последнюю ошибку. я и говорил о предварительном описании классов. |