解决:ERROR C2470:"XXX" 看起来像函数定义,但没有参数列表;跳过明显的函数体

本文介绍了解决MFC DLL编译过程中出现的C2470错误的方法。通过在DLL引用工程中正确地定义宏OPCLIB_EXT_CLASS,解决了类符号未定义的问题。


因项目需要自己封装了一个MFC的拓展DLL文件,在测试使用这个DLL的时候,编译过程中出现ERROR C2470的报错提示信息,,双击报错信息,指向了我在dll工程中定义的一个头文件(这里需要说明一下的是,我是将一个类封装为DLL的),即类的声明部分,如下:

class OPCLIB_EXT_CLASS CWrapper
{
  //实现具体功能
}
右键OPCLIB_EXT_CLASS,查找其的定义,发现未声明,此处需要说明的是OPCLIB_EXT_CLASS是定义的一个宏对应的是AFX_CLASS_IMPORT/AFX_CLASS_EXPORT,在DLL工程文件中的stdafx.h中进行定义的,而在引用DLL的工程文件中,未定义上述宏,这就是出现报错的原因。在引用的DLL工程的stdafx.h文件中,添加定义,编译运行,一切正常。添加的代码内容如下:

#ifdef OPCLIB
#define OPCLIB_EXT_CLASS AFX_CLASS_EXPORT
#define OPCLIB_EXT_API AFX_API_EXPORT
#define OPCLIB_EXT_DATA AFX_DATA_EXPORT
#else
#define OPCLIB_EXT_CLASS AFX_CLASS_IMPORT
#define OPCLIB_EXT_API AFX_API_IMPORT
#define OPCLIB_EXT_DATA AFX_DATA_IMPORT
#endif

以上。


Build started: Project: Test *** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\迅雷下载\keil ruanj\ARM\ARMCC\Bin' Build target 'Target 1' compiling BC26.c... ..\HARDWARE\BC26\BC26.c(17): error: #20: identifier "UART_Buffer" is undefined extern UART_Buffer buf_uart1; // 在uart.c中定义 ..\HARDWARE\BC26\BC26.c(54): error: #20: identifier "amp" is undefined printf("我的卡号是 : %s \r\n",&buf_uart1.buf[8]); ..\HARDWARE\BC26\BC26.c(54): error: #18: expected a ")" printf("我的卡号是 : %s \r\n",&buf_uart1.buf[8]); ..\HARDWARE\BC26\BC26.c(54): error: #65: expected a ";" printf("我的卡号是 : %s \r\n",&buf_uart1.buf[8]); ..\HARDWARE\BC26\BC26.c(88): error: #20: identifier "gt" is undefined if(errcount>100) //防止死循环 ..\HARDWARE\BC26\BC26.c(88): error: #18: expected a ")" if(errcount>100) //防止死循环 ..\HARDWARE\BC26\BC26.c(122): error: #20: identifier "amp" is undefined while(strx==NULL&&extstrx==NULL) ..\HARDWARE\BC26\BC26.c(122): error: #18: expected a ")" while(strx==NULL&&extstrx==NULL) ..\HARDWARE\BC26\BC26.c(130): error: #20: identifier "gt" is undefined if(errcount>100) //防止死循环 ..\HARDWARE\BC26\BC26.c(130): error: #18: expected a ")" if(errcount>100) //防止死循环 ..\HARDWARE\BC26\BC26.c(160): error: #20: identifier "gt" is undefined if(errcount>100) //防止死循环 ..\HARDWARE\BC26\BC26.c(160): error: #18: expected a ")" if(errcount>100) //防止死循环 ..\HARDWARE\BC26\BC26.c(203): error: #20: identifier "gt" is undefined if(errcount>100) //防止死循环 ..\HARDWARE\BC26\BC26.c(203): error: #18: expected a ")" if(errcount>100) //防止死循环 ..\HARDWARE\BC26\BC26.c(221): error: #20: identifier "lt" is undefined for(i=0;i<15;i++) ..\HARDWARE\BC26\BC26.c(221): warning: #174-D: expression has no effect for(i=0;i<15;i++) ..\HARDWARE\BC26\BC26.c(221): error: #18: expected a ")" for(i=0;i<15;i++) ..\HARDWARE\BC26\BC26.c: 1 warning, 16 errors "..\OUTPUT\CSTX.axf" - 16 Error(s), 1 Warning(s). Target not created. Build Time Elapsed: 00:00:00
最新发布
09-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值