如何引用静态函数作为参数传递?

时间:2011-10-05 09:42:56

标签: c++ scope compiler-errors

我有一个静态函数callback

static SCDynamicStoreCallBack callback( [params] ){ ... }

main,我正在呼叫

createIPAddressListChangeCallbackSCF(callback, manager, &storeRef, &sourceRef);

此函数需要将回调函数作为参数传递。但是,当我尝试编译时,我收到错误

error: ‘callback’ was not declared in this scope

callback在文件的根目录中声明。我应该如何从main引用它?

2 个答案:

答案 0 :(得分:3)

我认为问题是callback()没有在与main()相同的文件中定义。

静态函数(和变量)在文件中不可见,即使有原型或外部声明也是如此。因此,要么callback()必须移动到与main()相同的文件,要么它必须失去静态。

如果两个函数都在同一个文件中,则必须首先定义callback(),或者在main()之前必须有一个原型/声明。

答案 1 :(得分:0)

引用Wikipedia

  

在C编程语言中,static与全局变量一起使用   和函数将其范围设置为包含文件。在当地   变量static用于静态存储变量   分配内存而不是自动分配的内存。而   该语言并未规定任何一种类型的实现   内存,静态分配的内存通常在数据中保留   程序段在编译时自动完成   分配的内存通常实现为瞬态调用堆栈。

这意味着,static函数仅在声明的文件中可见。如果这与您调用createIPAddressListChangeCallbackSCF的文件不同,则会遇到确切的错误。通过删除static关键字来尝试。

编辑还可以在main中的可读位置添加功能定义。