我想知道为什么以下代码段不起作用:
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。
函数指针与函数声明不同,因此这根本不起作用。但是,你可以这样做:
typedef void(*MYFUNC_PTR)(int a);
MYFUNC_PTR myFunc;
void someFunc(int a)
{
}
int main() {
myFunc = someFunc;
return 0;
}
问题是myFunc
的类型是函数指针,而不是函数。在那之后你将myFunc
定义为一个函数(当然),它们不匹配。
您可以将typedef
的MYFUNC_PTR
更改为功能,然后
typedef void(MYFUNC_PTR)(int a);
MYFUNC_PTR myFunc;
void myFunc(int a)
{
}