Что вызывает "ошибку 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 (который работает нормально), и вы, очевидно, испортили заголовки, первое, что я проверю, - это включение путей. Опубликуйте их здесь.

Другие вопросы по тегам