首页 > 解决方案 > 函数指针类型不能用于函数原型

问题描述

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

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' 

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

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

标签: c++cvisual-c++function-pointersfunction-prototypes

解决方案


函数指针与函数声明不同,所以这根本行不通。但是,您可以这样做:

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

void someFunc(int a)
{

}

int main() {
    myFunc = someFunc;
    return 0;
}

推荐阅读