函数指针错误C2373:重新定义;不同类型的修饰符
问题描述:
我想编译一些函数指针赋值代码。
我尝试了指针赋值和__cdecl的不同变体。
但没有成功,过了一段时间,我放弃了......也许你会看到我不能做的事情。函数指针错误C2373:重新定义;不同类型的修饰符
我编译视觉快递2008年,标志:
/钆__cdecl调用约定
/O2最大化速度
/TC编译所有的文件.C
header:
#ifdef __cplusplus
extern "C" {
#endif
int __cdecl _intFunc(void); // tried without __cdelc as well
int (*_get_TYPE_MODE)(void) = NULL;
...
...
#ifdef __cplusplus
}
#endif
SRC:
int __cdecl _intFunc(void){return 0;}; // tried without __cdelc as well
_get_TYPE_MODE = _intFunc; // tried &_intFunc as well.
这产生如下错误:
SRC \皮下(61):错误C2373: '_get_TYPE_MODE':重新定义;不同类型的改性剂
SRC \ HH(94):见 '_get_TYPE_MODE' SRC \ SC(61)的声明:警告C4047:初始化': 'INT' 从“诠释在间接水平不同(__cdecl *) (无效)”
编辑:
当我改变编译器选项从/钆到/ GZ(功能__stdcall)出现在我的代码没有问题,但在其他地方的代码将无法编译。
答
不要将头文件中的代码
头:
int (*_get_TYPE_MODE)(void);
/* without the initialization (initialization is code)
int (*_get_TYPE_MODE)(void) = NULL; */
这不会改变任何东西...我不明白什么是“风格”有问题;) – bua 2010-09-21 10:37:12
显然你有一个不可饶恕的编译器(我不知道visual-studio-2008)。尝试在头文件中为函数指针的声明添加'extern'(并保留'= NULL') – pmg 2010-09-21 10:45:21
最终我解决了这个问题: typedef int(* _int_Function)(void); _int_Function iF = _intFuct; 但是每个函数指针都移动到结构中。好消息,extern也是如此。我以前不想使用它,但不记得为什么......嘿,如何“引用”又名。模糊评论中的文字? – bua 2010-09-21 11:12:59