函数指针类型不能用于函数原型

Function pointer type cannot be used for a function prototype

本文关键字:函数 原型 用于 类型 指针 不能      更新时间:2023-10-16

我想知道为什么以下代码片段不起作用:

typedef void (*MYFUNC_PTR)(int a);
MYFUNC_PTR myFunc;
void myFunc(int a)
{
}

我正在使用Microsoft Visual Studio 2017。源文件是".c",但我尝试了与".cpp"相同的方法。我得到的错误是

Error   C2365   'myFunc': redefinition; previous definition was 'data variable' 

注意:我认为这段代码会起作用,因为Microsoft提到了一个类似的代码片段(它也不起作用,因为我也测试了那个片段),例如在这里。

编辑:我认为这可能仅适用于较新的C++标准之一,但事实并非如此,因为我尝试了C++17。

函数指针与函数声明不是一回事,因此这根本不起作用。但是,您可以这样做:

typedef void(*MYFUNC_PTR)(int a);
MYFUNC_PTR myFunc;
void someFunc(int a)
{
}
int main() {
myFunc = someFunc;
return 0;
}

问题是myFunc的类型是函数指针,而不是函数。之后,您将myFunc定义为函数(当然),它们不匹配。

您可以更改MYFUNC_PTR运行typedef,然后

typedef void(MYFUNC_PTR)(int a);
MYFUNC_PTR myFunc;
void myFunc(int a)
{
}