Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.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++;密码? 在我的应用程序中(VisualC++ 2010下编译),我在头文件中有这样的代码: // example.h #pragma once #include <limits> namespace myspace { // A generic equality test template<typename T> inline bool equal( const T &v1, const T &v2, const T &eps = std::numeric_limits<T>::epsilon()) { return (v1 == v2); } // Template specialization for floating-point numbers template<> bool equal<float>( const float &v1, const float &v2, const float &eps); // A generic equality test for finite-precision real number representations (with epsilon) template<typename T> inline bool realEqual( const T &p, const T &q, const T &eps = std::numeric_limits<T>::epsilon()) { return (fabs(p - q) < eps); } } // namespace myspace //example.h #布拉格语一次 #包括 命名空间myspace { //一般的平等性检验 模板内联布尔相等( 常数T&v1, 康斯特T&v2, 常数T&eps=std::数值限制::ε() { 返回(v1==v2); } //浮点数的模板专门化 模板布尔相等( 常量浮点和v1, 常量浮点和v2, 常量浮点和每股收益); //有限精度实数表示的通用等式检验(带epsilon) 模板内联bool realEqual( 康斯特T&p公司, 康斯特T&q公司, 常数T&eps=std::数值限制::ε() { 收益率(fabs(p-q)_C++_Visual Studio_Compiler Errors_Numeric Limits - Fatal编程技术网

为什么我会得到一个;“非法代币”;这段C++;密码? 在我的应用程序中(VisualC++ 2010下编译),我在头文件中有这样的代码: // example.h #pragma once #include <limits> namespace myspace { // A generic equality test template<typename T> inline bool equal( const T &v1, const T &v2, const T &eps = std::numeric_limits<T>::epsilon()) { return (v1 == v2); } // Template specialization for floating-point numbers template<> bool equal<float>( const float &v1, const float &v2, const float &eps); // A generic equality test for finite-precision real number representations (with epsilon) template<typename T> inline bool realEqual( const T &p, const T &q, const T &eps = std::numeric_limits<T>::epsilon()) { return (fabs(p - q) < eps); } } // namespace myspace //example.h #布拉格语一次 #包括 命名空间myspace { //一般的平等性检验 模板内联布尔相等( 常数T&v1, 康斯特T&v2, 常数T&eps=std::数值限制::ε() { 返回(v1==v2); } //浮点数的模板专门化 模板布尔相等( 常量浮点和v1, 常量浮点和v2, 常量浮点和每股收益); //有限精度实数表示的通用等式检验(带epsilon) 模板内联bool realEqual( 康斯特T&p公司, 康斯特T&q公司, 常数T&eps=std::数值限制::ε() { 收益率(fabs(p-q)

为什么我会得到一个;“非法代币”;这段C++;密码? 在我的应用程序中(VisualC++ 2010下编译),我在头文件中有这样的代码: // example.h #pragma once #include <limits> namespace myspace { // A generic equality test template<typename T> inline bool equal( const T &v1, const T &v2, const T &eps = std::numeric_limits<T>::epsilon()) { return (v1 == v2); } // Template specialization for floating-point numbers template<> bool equal<float>( const float &v1, const float &v2, const float &eps); // A generic equality test for finite-precision real number representations (with epsilon) template<typename T> inline bool realEqual( const T &p, const T &q, const T &eps = std::numeric_limits<T>::epsilon()) { return (fabs(p - q) < eps); } } // namespace myspace //example.h #布拉格语一次 #包括 命名空间myspace { //一般的平等性检验 模板内联布尔相等( 常数T&v1, 康斯特T&v2, 常数T&eps=std::数值限制::ε() { 返回(v1==v2); } //浮点数的模板专门化 模板布尔相等( 常量浮点和v1, 常量浮点和v2, 常量浮点和每股收益); //有限精度实数表示的通用等式检验(带epsilon) 模板内联bool realEqual( 康斯特T&p公司, 康斯特T&q公司, 常数T&eps=std::数值限制::ε() { 收益率(fabs(p-q),c++,visual-studio,compiler-errors,numeric-limits,C++,Visual Studio,Compiler Errors,Numeric Limits,…以及.cpp文件中的一些代码: // example.cpp #include "example.h" using namespace std; using namespace myspace; // equal-macro specialization that calls the appropriate equality test function for real numbers template<> bool myspace::equal<float>(

…以及.cpp文件中的一些代码:

// example.cpp
#include "example.h"

using namespace std;
using namespace myspace;

// equal-macro specialization that calls the appropriate equality test function for real numbers
template<> bool myspace::equal<float>(
    const float &v1, 
    const float &v2, 
    const float &eps)
{
    return (realEqual(v1, v2, eps));
}

int _tmain(int argc, _TCHAR* argv[])
{
    float a,b;
    bool x = realEqual(a,b); // OK
    bool x = equal(a,b); // compile error
    return 0;
}
//example.cpp
#包括“example.h”
使用名称空间std;
使用名称空间myspace;
//相等宏专门化,为实数调用适当的相等测试函数
模板bool myspace::equal(
常量浮点和v1,
常量浮点和v2,
常量浮点和eps)
{
回报率(realEqual(v1、v2、eps));
}
int _tmain(int argc,_TCHAR*argv[]
{
浮子a、b;
boolx=realEqual(a,b);//好的
boolx=equal(a,b);//编译错误
返回0;
}
这无法编译,给了我:

------构建已启动:项目:测试,配置:调试Win32------
test.cpp
c:\users\ninja\documents\visualstudio 2010\projects\test\test\test.h(10):错误C2589:':':右侧的非法令牌:':'
c:\users\ninja\documents\VisualStudio2010\projects\test\test\test.h(10):错误C2059:语法错误:':'
=========生成:0成功,1失败,0最新,0跳过===========

有问题的一行定义了equal()函数的“eps”参数的默认值

一个谷歌搜索显示人们和其他函数有类似的“非法令牌”错误,从MyC++限制,即MINE()和Max(),但是这些是由于Windows特定的C++标准库头文件中存在的一些定义,它们定义了“Min”和“Max”,这是由于一些遗留的原因。没有提到epsilon(),我完全不明白为什么我会在这里出错。无论如何,将函数名从“equal”更改为“smartEqual”仍然会出现相同的错误,因此名称显然不是问题所在。是什么


谢谢

它似乎是由Visual Studio中的此错误引起的:

另见此处:


如果删除它编译的默认参数?作为一个数据点,如果在第二个
x
之前包含
cmath
头并去掉无关的
bool
(好的,适当地更改
\u tmain
的签名并将其放在一个文件中),Comeau在线编译器()可以很好地编译它作为另一个数据点,Lion上的g++也可以编译修改最少的版本。@Seth:是的,删除默认参数会使其编译,但我确实希望该值在那里,因为它在大多数情况下都是可取的。在我看来,equal和realEqual几乎是一样的东西,那么为什么一个有效而另一个无效呢?@Stuart:我在VS2010下加了一句,没有变化。谢谢!我通过创建一个额外的模板函数getEpsilon(){return numeric_limits::epsilon();}并使用它初始化默认参数,解决了这个问题。“鉴于此,我们计划在下一版本中不修复这个错误,而是解决更严重的问题,因为没有解决办法。”啊,微软。为什么不同时修复这两个问题并将发布推迟一天?@Seth:可能是因为:“不幸的是,修复编译器的这一部分成本高昂,容易导致更严重的问题,并且可能导致现有(格式错误但可操作的)代码出现问题。”。我不羡慕那些背负着破烂旧代码的家伙。也就是说,在某种程度上,很高兴知道这一次搞砸的不是我@那不是(好的)借口。正确操作并修复您的Microsoft代码!不过,我很同情他们,他们是一家大型公司,操纵这么大的一艘船并不容易。现在我遇到了另一个错误,无法使用该功能两次…:/看见