На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Похоже, что нехватает каких-то настоек... но каких?
    Есть C++/crl проект.
    В какой-то момент был включен хидер одной библиотеки, и там по цепочке было включено еще несколько хидеров... короче проект перестал компилироваться в дебак моде и компилируется в релизе.

    Опытнум путем нашел проблему:
    ExpandedWrap disabled
      template <class T>
      inline const T & min(const T & a, const T & b)
      {
        return b < a ? b : a;
      }

    В дебаг може выдает 3 ошибки:
    Цитата
    error C2988: unrecognizable template declaration/definition
    error C2059: syntax error: 'const'
    error C2059: syntax error: ')'


    В релизе компилируется.
    При этом в дебаг моде "min" подсвечивается как определенный макрос и ведет в c:\Program Files (x86)\Windows Kits\8.1\Include\shared\minwindef.h
    ExpandedWrap disabled
      #ifndef NOMINMAX
       
      #ifndef max
      #define max(a,b)            (((a) > (b)) ? (a) : (b))
      #endif
       
      #ifndef min
      #define min(a,b)            (((a) < (b)) ? (a) : (b))
      #endif
       
      #endif  /* NOMINMAX */


    При этом такая фигня происходит только в одном проекте, другой проект, которые тоже включает всю эту последовательность хидеров, компилируется без проблем.

    Каких-то значимых различий в настройках прокта я не вижу. Может быть я что-то упустил из виду? И есть какая-то настройка, которую я не заметил?
      Ну если тебе не нужны стандартные min/max, то можно объявить макрос, у тебя же в коде написано, что если не объявлен NOMINMAX, тогда оно делает макросы min/max. Судя по всему у тебя и произошла коллизия.
      Вот попробуй перед тем хидером, который ты включил написать что то типа:
      ExpandedWrap disabled
        #ifndef NOMINMAX
        #define NOMINMAX
        #include <some_header.h>
        #undef NOMINMAX
        #else
        #include <some_header.h>
        #endif
      Сообщение отредактировано: KILLER -
        Да, похоже там коллизия. Я добавил NOMINMAX в настройки проекта и все заработало.

        А так, NOMINMAX судя по всему определяется где-то в недрах буста. Поэтому в одном проекте все ОК, а в другом - нет. Почему в релизе работало, а в дебаге нет я не понял...
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0205 ]   [ 17 queries used ]   [ Generated: 29.03.24, 13:25 GMT ]