Ошибка при использовании std :: max в шаблоне - PullRequest
0 голосов
/ 25 января 2012

Могу ли я использовать стандартные функции в шаблоне функций? Я добавил и написал

#pragma region BlendFunctions

template <class T> 
T BlendLightenf(T x, T y) 
{ 
    return std::max(x, y); //errors here
} 
template <class T> 
T BlendDarkenf(T x, T y) 
{ 
  return std::min(x, y); //errors here
} 

и получите

error C2589: '(' : illegal token on right side of '::'

и

error C2059: syntax error : '::'

прямо в одной строке (x и y обычно float).

Мои определения:

#ifdef MAGICLIB_EXPORTS
#define CPPWIN32DLL_API __declspec(dllexport)
#else
#define CPPWIN32DLL_API __declspec(dllimport)
#endif


#include <stdio.h>
#include <string>
#include <algorithm> 

Ответы [ 2 ]

5 голосов
/ 25 января 2012

Вы используете VC ++?(Сообщения об ошибках выглядят так.) Если это так, вам нужно добавить /DNOMINMAX в командную строку.(В графическом интерфейсе он находится в разделе Свойства конфигурации → C / C ++ → Препроцессор → Определения препроцессора.) Или нигде не включайте <windows.h> (но это трудно контролировать, поскольку вы включаете файлы, которые включают другие файлы, которые включают ...).

4 голосов
/ 25 января 2012

Убедитесь, что max не определен кем-то другим.

Иногда вы включаете файл, который определяет max как что-то еще (скорее всего, (a > b ? a : b) или что-то в этом роде).

Если у вас есть один из этих файлов, препроцессор сломает std::max, заменив max его определением (что-то вроде этого std::(a > b ? a : b)), и вы получите странную ошибку.добавьте #undef max после заголовка, и все будет в порядке.

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