2010-09-21 1015 views
0

我想编译一些函数指针赋值代码。
我尝试了指针赋值和__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)出现在我的代码没有问题,但在其他地方的代码将无法编译。

回答

0

不要将头文件中的代码

头:

int (*_get_TYPE_MODE)(void); 
/* without the initialization (initialization is code) 
int (*_get_TYPE_MODE)(void) = NULL; */ 
+0

这不会改变任何东西...我不明白什么是“风格”有问题;) – bua 2010-09-21 10:37:12

+0

显然你有一个不可饶恕的编译器(我不知道visual-studio-2008)。尝试在头文件中为函数指针的声明添加'extern'(并保留'= NULL') – pmg 2010-09-21 10:45:21

+0

最终我解决了这个问题: typedef int(* _int_Function)(void); _int_Function iF = _intFuct; 但是每个函数指针都移动到结构中。好消息,extern也是如此。我以前不想使用它,但不记得为什么......嘿,如何“引用”又名。模糊评论中的文字? – bua 2010-09-21 11:12:59

相关问题