我有一个静态函数callback
:
static SCDynamicStoreCallBack callback( [params] ){ ... }
在main
,我正在呼叫
createIPAddressListChangeCallbackSCF(callback, manager, &storeRef, &sourceRef);
此函数需要将回调函数作为参数传递。但是,当我尝试编译时,我收到错误
error: ‘callback’ was not declared in this scope
callback
在文件的根目录中声明。我应该如何从main
引用它?
答案 0 :(得分:3)
我认为问题是callback()没有在与main()相同的文件中定义。
静态函数(和变量)在文件中不可见,即使有原型或外部声明也是如此。因此,要么callback()必须移动到与main()相同的文件,要么它必须失去静态。
如果两个函数都在同一个文件中,则必须首先定义callback(),或者在main()之前必须有一个原型/声明。
答案 1 :(得分:0)
引用Wikipedia:
在C编程语言中,static与全局变量一起使用 和函数将其范围设置为包含文件。在当地 变量static用于静态存储变量 分配内存而不是自动分配的内存。而 该语言并未规定任何一种类型的实现 内存,静态分配的内存通常在数据中保留 程序段在编译时自动完成 分配的内存通常实现为瞬态调用堆栈。
这意味着,static
函数仅在声明的文件中可见。如果这与您调用createIPAddressListChangeCallbackSCF
的文件不同,则会遇到确切的错误。通过删除static
关键字来尝试。
编辑还可以在main
中的可读位置添加功能定义。