【问题标题】:error C2664: cannot convert parameter 1 from 'int' to 'int (__cdecl *)(int)'错误 C2664:无法将参数 1 从“int”转换为“int (__cdecl *)(int)”
【发布时间】:2011-06-13 14:52:09
【问题描述】:

在将函数作为另一个函数的参数传递时遇到了一些问题...

错误:错误 1 ​​错误 C2664:“包装器” : 无法将参数 1 从 'int' 到 'int (__cdecl *)(int)'

int inc( int n )
{
    return n + 1 ;
}

int dec( int n )
{
    return n - 1 ;
}

int wrapper(   int i, int func(int)   )
{
    return func( i ) ;
}   


int main(){

    int a = 0 ;

    a = wrapper(  3, inc( 3 )  ) ;

    return 0 ;

}

【问题讨论】:

    标签: c++ function parameters c2664


    【解决方案1】:

    您将函数调用 inc(3) 的结果传递给 wrapper,而不是预期的函数指针。

    a = wrapper(3, &inc) ;

    【讨论】:

      【解决方案2】:

      您的调用传递一个整数,即调用 inc(3) 的返回值,即 4。

      那不是函数指针。

      也许你的意思是:

      a = wrapper(3, inc);
      

      这会起作用,并使用参数3 为调用int 分配一个值。

      【讨论】:

        【解决方案3】:

        行:

         a = wrapper(  3, inc( 3 )  ) ;
        

        有效:

        a = wrapper(3, 4);
        

        我想你的意思是:

        a = wrapper(3, inc);
        

        这会将指向 inc() 函数的指针作为 wrapper() 的第二个参数传递。

        【讨论】:

          【解决方案4】:

          就像现在一样,wrapper 采用 int 和一个指向函数的指针,该函数采用 int 并返回 int。您正在尝试向它传递一个 int 和一个 int,因为不是传递 指向函数的指针,而是 调用 函数并传递返回值(一个int)。要使您的代码按(我认为)您期望的那样工作,请将您对 wrapper 的调用更改为:

          a = wrapper(3, &inc);
          

          【讨论】:

          • 非常感谢大家的快速回复..我以前遇到过这个问题,并且在不了解问题的情况下设法让它工作......现在它工作了,我明白为什么..再次感谢
          【解决方案5】:

          我的程序中有这个错误:

          error C2664: 'glutSpecialFunc' : cannot convert parameter 1 from 'void (__cdecl *)(void)' to 'void (__cdecl *)(int,int,int)'
          

          因为我写的方法定义晚于主方法。 当我剪切主方法并在函数定义之后粘贴时,错误被删除。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-02
            • 1970-01-01
            • 2015-06-12
            • 2018-11-25
            • 1970-01-01
            相关资源
            最近更新 更多