Я просто столкнулся с условием, когда я # включаю заголовок, я запускаю ошибки компиляции, которые требуют от меня #include заголовков, которые уже были включены в исходный заголовок.При каких условиях заголовки C++ не транзитивны?
Заголовок имеет следующее содержание:
#pragma once
#include <atlbase.h>
#include <atlcom.h>
#include "itestobj.h"
extern "C" ITestObj* WINAPI GetTestObj();
Затем я получаю кучу ATL связанных с ошибками компиляции, когда я код против того, разрешаются путем включения atlbase.h
и atlcom.h
в файле C++ в дополнение к над заголовком.
Почему эти заголовки не включены, как обычно, это так?
Возможно, вам нужно «#include' вместо этих внутренних файлов? –
Неправильное размещение файла с предварительно скомпилированными заголовками (stdafx.h) является одной из таких ловушек. Он должен быть включен первым. –