Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 右侧的非法令牌::_C++_Linux_Winapi - Fatal编程技术网

C++ 右侧的非法令牌::

C++ 右侧的非法令牌::,c++,linux,winapi,C++,Linux,Winapi,我有以下模板声明: template <typename T> void IterTable(int& rIdx, std::vector<double>& rVarVector, const std::vector<T>& aTable, const T

我有以下模板声明:

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;

第216行,就是前面提到的那一行。

我猜
max
已经变成了一个宏。这发生在
windows.h
内部的某个点上

在包含之前定义
NOMINMAX
,以停止
windows.h

编辑: 我仍然相信这是你的问题。(不包括
将导致不同的错误)。将
#undef max
#undef min
放在函数前面,然后重试。如果这解决了它,我是正确的,并且您的
NOMINMAX
没有被正确定义。(将其添加为项目设置。)

还可以通过以下方法防止宏扩展:
(std::numeric\u limits::max)(



另一方面,为什么不执行std::numeric\u limits::min()而不是对最大值求反?

看起来您需要:

#include

我编写了一个“测试工具”,其中包含一个简单的结构,其中包含了您的方法声明(以及其他内容),并且#include
,并调用(并因此实例化)了
T
int
的方法,并且编译得很好,Windows Vista上的Visual Studio 2008 Express和Linux 2.6上的GCC 4.2.4


我建议尝试只构建少量包含“问题”的代码,如果确实构建了问题,请将其添加到项目的其余部分,直到问题出现,然后您就会知道问题的原因。

对我来说很有效。你有
#包含
?如果编译器告诉我们这个令牌是什么,那将非常有用。在某些方面,现代C++编译器仍然很糟糕。(并且这种错误消息不限于一个编译器。)尝试保存/查看预处理器输出。(/E或/P)。是否已检查是否包含
?无需包含任何限制库或无需定义NOMINMAX。请参阅此处的解决方案:只需在(std::max)或(std::min)中添加括号,或者,如果出于某种原因无法使用
NOMINMAX
,可以通过将函数名插入括号来防止宏扩展:
(std::numeric_limits::max)(
)。这是非常非常难看的,但在某些情况下可能是必要的。对于两个补码整数(这几乎是你所能得到的),最小值比最大值的反值小一个。所以,我同意你的观点:为什么要否定最大值?这个(std::numeric_limits::max)对我来说很好。一个非常方便的帖子!windows.h对max/min的定义造成了多大的麻烦,真是令人震惊。@danelliottster。因为一个愚蠢的小写定义,我不能使用标准库函数。这是正确的答案,它解决了构建问题。
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