我可以在模板函数中使用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>
答案 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
,这样就可以了。