我有以下模板声明:
template <typename T>
void IterTable(int& rIdx,
std::vector<double>& rVarVector,
const std::vector<T>& aTable,
const T aValue,
T aLowerBound = -(std::numeric_limits<T>::max()), //illegal token on right side of '::' shows here
bool aLeftOpen = true) const;
Run Code Online (Sandbox Code Playgroud)
如上所述,在" - (std :: numeric_limits :: max())"行上抛出非法令牌错误.我从一些旧的Linux源代码中获得了这个代码,我正在尝试在Windows上编译.知道问题是什么吗?
编辑:使用min()也失败,编译器输出为:
Error 92 error C2589: '::' : illegal token on right side of '::' c:\projects\r&d\prepaydll\include\cfcdefault.h 216 PrepayDLL
Error 93 error C2059: syntax error : '::' c:\projects\r&d\prepaydll\include\cfcdefault.h 216 PrepayDLL
Run Code Online (Sandbox Code Playgroud)
线216是前面提到的线.
GMa*_*ckG 116
我的猜测是max做了一个宏.这发生在内部的某些方面windows.h.
NOMINMAX在包括停止windows.h这样做之前定义.
我仍然相信这是你的问题.(不包括<limits>会导致不同的错误).将#undef max和#undef min刚刚函数之前,然后再试一次.如果它修复它,我是正确的,你NOMINMAX没有正确定义.(将其添加为项目设置.)
您还可以防止宏展开的:(std::numeric_limits<T>::max)().
在旁注,为什么不做std::numeric_limits<T>::min()而不是否定最大值?