Разъяснение по заголовку без #include - PullRequest
0 голосов
/ 03 декабря 2009

Я читал некоторый код из Doom 3 SDK (в решении VS), когда нашел заголовок, подобный этому:

#ifndef __PLAYERICON_H__
#define __PLAYERICON_H__

    class idPlayerIcon {
        public:
            idPlayerIcon();
            ~idPlayerIcon();

        ...... // omitted

        public:
            playerIconType_t    iconType;
            renderEntity_t      renderEnt;
            qhandle_t       iconHandle;

        };

#endif  /* !_PLAYERICON_H_ */

В заголовке нет ни объявления класса forward, ни #include, поэтому, по моему опыту, это должно привести к ошибке, такой как: необъявленный идентификатор или синтаксическая ошибка, так как renderEntity_t и qhandle_t не "видны". Так как же это правильно скомпилировать? Заранее благодарю за ответы.

Ответы [ 4 ]

4 голосов
/ 03 декабря 2009

Поскольку каждый раз, когда он включается, необходимые сущности заранее объявляются / включаются непосредственно перед ним, поэтому все определяется в точке включения. Как вы правильно сказали, по-другому не получится.

3 голосов
/ 03 декабря 2009

Я предполагаю, что они включают другие заголовки, прежде чем включать этот.

2 голосов
/ 03 декабря 2009

Так как это заголовочный файл, вероятно, есть порядок их включения в другом месте (где этот файл может быть использован?). Пока renderEntity_t и qhandle_t попадают в таблицу символов до включения этого файла, это не имеет значения.

1 голос
/ 03 декабря 2009

Есть что-то, называемое stdafx.h? У большинства проектов VS есть такие.

Это просто заголовок, который включает все необходимые файлы для вашего приложения, чтобы сократить время компиляции, включая заголовки.

Так что это будет содержать что-то вроде этого:

#ifndef _STDAFX_H_
#define _STDAFX_H_

#include "playerIconAndOtherVariables.h"
#include "thatFileYouListed.h"

#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...