Что вызывает "ошибку C2856: #pragma hdrstop не может быть внутри блока #if" в VS C++?
Была программа, которую я мог составить под 2008 на некоторое время. Обратите внимание, что я могу скомпилировать программу, используя cl и в Ultimate++ IDE. Это довольно большая программа, поэтому я не собираюсь публиковать ее здесь. Я не могу скомпилировать его в студии.
Ошибка
1>c:\program files\microsoft visual studio 9.0\vc\include\xstring(1735)
: error C2856: #pragma hdrstop cannot be inside an #if block
что кажется идиотским, так как там нет hdrstop.
Предварительно скомпилированные заголовки отключены.
Вот что там:
if (_Mysize < _Off)
_String_base::_Xran(); // _Off off end
if (_Mysize - _Off < _Count)
_Count = _Mysize - _Off;
_Traits_helper::copy_s<_Traits>(_Dest, _Dest_size, _Myptr() + _Off, _Count);
return (_Count);
}
void __CLR_OR_THIS_CALL swap(_Myt& _Right)
{ // exchange contents with _Right <<<<<<<<----------this is the line
if (this == &_Right)
; // same object, do nothing
else if (_Mybase::_Alval == _Right._Alval)
{ // same allocator, swap control information
Благодарю.
4 ответа
Грубое предположение.
Предварительно скомпилированные заголовки отключены для проекта? Отключены ли они для каждого исходного файла в проекте (потому что отдельные настройки файла перезаписывают настройки всего проекта).
Я узнал это. Это вызвано предварительно скомпилированными заголовками, но отключать это не нужно.
Бывает когда на высшем уровне #include "headertobeprecompiled.h"
находится внутри #if
#endif
блок. Если можно переместить его наружу, то сообщение об ошибке исчезнет.
Я столкнулся с точно такой же проблемой и также был озадачен, так как в моем коде нет прагм hdrstop. Тем не менее, я компилирую из сценария (не IDE), и когда я опускаю опцию компилятора /Yc (создать PCH), ошибка исчезает.
Поскольку Visual C++ вызывает cl (который работает нормально), и вы, очевидно, испортили заголовки, первое, что я проверю, - это включение путей. Опубликуйте их здесь.