当前位置: 首页 > 知识库问答 >
问题:

解析变量参数到函数指针

姜华翰
2023-03-14

Windows 10、Visual Studio 2019、C 17:

编译错误:无法将参数2从“int(\u cdecl*)(int)”转换为“…”

////////////////////////////////////////////////////////////////////
// This is the templated function that becomes a variadic argument
//
template <typename siz> 
int func(siz size)
{
    // ...
    // ...
    return 0;
}
///////////////////////////////////////////////////////////
// This is the function that uses variadic arguments
//
int usefunc(int option, ...)
{
    // ...
    // ...
    return 0;
}

int main()
{
    int result;

    result = usefunc(0, func); // ** int usefunc(int,...)': cannot convert argument 2 from 'int (__cdecl *)(int)' to '...' **
                               // Context does not allow for disambiguation of overloaded function
    return result;
}    

如果没有模板(int func(int size)),代码编译正常。如何修改它以使编译器理解可变参数?

共有1个答案

东方栋
2023-03-14

问题是func被视为函数指针,但C中不允许指向模板函数的指针。

您需要指定在引用func时计划使用的类型,例如:

result = usefunc(0, func<int>);

您可以使用decltype来引用变量的类型,以便更加灵活:

result = usefunc(0, func<decltype(result)>);
 类似资料:
  • 主要内容:用数组作函数参数在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的 指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。 像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合。 有的时候,对于整数、小数

  • 对不起,我不知道这个问题的标题是什么。 我在C中有一个函数,它以λ作为参数。 然后我尝试调用这个函数。 我的问题是,我无法从lambda函数内部访问变量,如果我试图用

  • 这是一个相当基本的程序。当我尝试打印方法和方法时,我会出现错误,表示参数不能解析为变量。 公共类PizzaOutput{ 导入java.util.scanner; 公共类PizzaInput{Scanner键盘=新扫描器(System.in); } 公共级披萨订单{私人最终双份奶酪价格=2.40;

  • 本文向大家介绍C++指向函数的指针实例解析,包括了C++指向函数的指针实例解析的使用技巧和注意事项,需要的朋友参考一下 通常来说C++函数指针是指指向函数的指针,而非指向对象的指针。就像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关。 定义: 赋值: fp=function; 调用 (*fp)(10,100); volatile的用法和作用: con

  • 我创建了2个函数,读取和写入一个路径,声明为: 我创建了一个额外的函数,它将使用路径调用上述函数之一 但是,当作为回调传递给时,编译器会发出以下警告 将“int(const char*,const void,int)”传递给类型为“int()(const char*,void*,int)”的参数的指针类型不兼容 将接受常量指针的函数转换为接受非常量指针的函数会是未定义的行为吗? 我注意到有一个几乎

  • 所以我有两个函数都有相似的参数 现在,调用,但我如何在不修改的情况下传递变量参数列表中的变量(因为这在其他地方也已经使用了)。