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

问题描述 投票:2回答:2

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

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' 

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

编辑:我想也许这只适用于一个较新的C ++标准,但事实并非如此,因为我尝试了C ++ 17。

c++ c visual-c++ function-pointers function-prototypes
2个回答
2
投票

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

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

void someFunc(int a)
{

}

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

2
投票

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

您可以将typedefMYFUNC_PTR更改为功能,然后

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

}

LIVE

© www.soinside.com 2019 - 2024. All rights reserved.