代码之家  ›  专栏  ›  技术社区  ›  Arkady

在模板函数中使用isnan

  •  -1
  • Arkady  · 技术社区  · 8 年前

    我有以下代码:

      template<int FORMAT>
      int double_to_bulk(double value,
                           char* buf,
                           double max_num,
                           int* state = NULL)
      {
         if (isnan(value))
         {
            //Something to do
            return 1;
         }
         //Something more to do
      }
    

    奇怪的编译错误:

    myfile。h: 在函数int double_to_bulk(double、char*、double, 整数*):

    myfile。h: 351:错误:isnan没有参数 依赖于模板参数,因此isnan的声明必须是 可获得的

    myfile。h: 351:错误:(如果使用-fpermissive,G++将 接受您的代码,但允许使用未声明的名称是 已弃用)

    但我真的不想使用 -fpermissive

    我使用 gcc 4.1.2 ,相当老,但与它无关。为什么使用有问题 isnan 在模板函数中?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Logicrat    8 年前

    看起来您没有可用的定义 isnan 。您是否在源文件中包含适当的头文件,其中 伊斯南 是否定义了?这里似乎没有任何东西依赖于模板参数。

        2
  •  0
  •   Isaac    8 年前

    添加线条 #include<cmath> 应该解决这个问题。

    如果任何参数依赖于模板参数(例如,如果其中一个参数具有模板参数类型),编译器将仅检查是否存在 isnan 当您实例化模板时,这可能会在稍后导致错误,或者如果您从未使用过模板,则可能根本不会。

    请勿使用 -fpermisive ,它可能只会延迟错误链接时间