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

时间:2019-04-12 07:48:57

标签: c++ c visual-c++ function-pointers function-prototypes

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

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

void myFunc(int a)
{

}

我正在使用Microsoft Visual Studio2017。源文件是“ .c”,但我尝试使用“ .cpp”进行相同操作。我收到的错误是

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

注意:我认为该代码将起作用,因为Microsoft提到了类似的代码段(如我所测试的那样,也无效),例如here

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

2 个答案:

答案 0 :(得分:2)

函数指针与函数声明不一样,因此根本不起作用。您可以执行以下操作:

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

void someFunc(int a)
{

}

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

答案 1 :(得分:2)

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

您可以将typedef的{​​{1}}更改为起作用,然后

MYFUNC_PTR

LIVE