Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.160.154] |
|
Сообщ.
#1
,
|
|
|
Есть C++/crl проект.
В какой-то момент был включен хидер одной библиотеки, и там по цепочке было включено еще несколько хидеров... короче проект перестал компилироваться в дебак моде и компилируется в релизе. Опытнум путем нашел проблему: 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 #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 */ При этом такая фигня происходит только в одном проекте, другой проект, которые тоже включает всю эту последовательность хидеров, компилируется без проблем. Каких-то значимых различий в настройках прокта я не вижу. Может быть я что-то упустил из виду? И есть какая-то настройка, которую я не заметил? |
Сообщ.
#2
,
|
|
|
Ну если тебе не нужны стандартные min/max, то можно объявить макрос, у тебя же в коде написано, что если не объявлен NOMINMAX, тогда оно делает макросы min/max. Судя по всему у тебя и произошла коллизия.
Вот попробуй перед тем хидером, который ты включил написать что то типа: #ifndef NOMINMAX #define NOMINMAX #include <some_header.h> #undef NOMINMAX #else #include <some_header.h> #endif |
Сообщ.
#3
,
|
|
|
Да, похоже там коллизия. Я добавил NOMINMAX в настройки проекта и все заработало.
А так, NOMINMAX судя по всему определяется где-то в недрах буста. Поэтому в одном проекте все ОК, а в другом - нет. Почему в релизе работало, а в дебаге нет я не понял... |