Что вызывает «ошибку C2856: #pragma hdrstop не может быть внутри блока #if» в VS C ++? - PullRequest
1 голос
/ 26 февраля 2010

Была программа, которую я мог собрать под 2008 на некоторое время.Обратите внимание, я могу скомпилировать программу, используя cl и в Ultimate ++ IDE.Это довольно большая программа, поэтому я не собираюсь публиковать ее здесь.Я не могу скомпилировать его в Studio.

Ошибка:

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 ]

3 голосов
/ 15 октября 2011

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

Это происходит, когда верхний уровень #include "headertobeprecompiled.h" находится внутри блока #if #endif. Если его можно переместить за пределы, сообщение об ошибке исчезнет.

3 голосов
/ 26 февраля 2010

Дикая догадка.

Предварительно скомпилированные заголовки отключены для проекта? Отключены ли они для каждого исходного файла в проекте (отдельные настройки файлов перезаписывают настройки всего проекта).

0 голосов
/ 04 сентября 2011

Я столкнулся с точно такой же проблемой, но также был озадачен, поскольку в моем коде также нет прагм hdrstop. Тем не менее, я компилирую из сценария (не IDE), и когда я опускаю опцию компилятора / Yc (создать PCH), ошибка исчезает.

0 голосов
/ 26 февраля 2010

Поскольку Visual C ++ вызывает cl (который работает нормально), и вы, очевидно, испортили заголовки, первое, что я проверю, это включение путей. Опубликуйте их здесь.

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