У меня включены предварительно скомпилированные заголовки в проекте статической библиотеки, над которым я работаю. Оглядываясь на другие вопросы StackOverflow, кажется, что ключевое место для #include «stdafx.h» находится в файле .cpp, а не в файле .h.
Однако, когда я делаю это в Visual Studio, я получаю ошибку IntelliSense:
1 IntelliSense: предупреждение PCH: остановка заголовка не может быть в блоке макроса или #if. Файл IntelliSense PCH не был создан. …. \ Common \ Core \ Geometry \ Ellipsoid.h 9
Статический проект библиотеки делает успешно скомпилировать, даже с этой ошибкой IntelliSense.
Файл .h состоит из этого объявления класса:
#ifndef GEOMETRY_ELLIPSOID_H
#define GEOMETRY_ELLIPSOID_H
class Ellipsoid { // 'class' is underlined with a red line (error)
// ...
};
#endif // !GEOMETRY_ELLIPSOID_H
.Cpp определяет класс, объявленный в заголовке:
#include "Common\Core\stdafx.h"#include "Ellipsoid.h"
// ...
При включении stdafx.h в заголовок ошибка intelliSense исчезает. Это правильный способ использовать предварительно скомпилированные заголовки? Какие последствия есть в том, чтобы включить в заголовок stdafx.h?
Вы должны добавить #pragma один раз в начале файла
Ответ здесь: Предупреждение PCH: остановка заголовка не может быть в блоке макроса или #if — Visual C ++ 2010 Express SP1
макро-или-если-блок-зрительно-с-2010-ехр
Других решений пока нет …