在模板中使用std :: max时出错

时间:2012-01-25 09:01:59

标签: c++ templates visual-c++ compiler-errors max

我可以在模板函数中使用std函数吗? 我添加并写了

#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 个答案:

答案 0 :(得分:5)

您使用的是VC ++吗? (错误消息看起来像。)如果是这样,您需要 在命令行中添加/DNOMINMAX。 (在GUI中,它在 配置属性→C / C ++→预处理器→预处理器 定义。)或者不要在任何地方包含<windows.h>(但这很难 控制,因为您包含其他文件包含的文件 包括...)。

答案 1 :(得分:4)

检查max是否未被其他人定义。

有时您会添加一个将max定义为其他内容的文件(最有可能是(a > b ? a : b)或类似的内容)。

如果您包含其中一个文件,预处理器将通过将max替换为其定义(类似于此std::max)来中断std::(a > b ? a : b),并且您会收到一个奇怪的错误。

您可以在有问题的标题后添加#undef max,这样就可以了。