vs2010编译时出现错误提示:error C2470: “xx”: 看起来像函数定义,但没有参数列表;跳过明显的函数体

来源:互联网 发布:everyonepiano软件下载 编辑:程序博客网 时间:2024/05/19 11:47

一个vs2010的项目中包含了多个dll工程,最近由于修改,对其中的两个dll工程A、B都拷贝了一份分别命名为C、D,然后修改原始工程中的文件名和类名,以便和原来的名称相区分,防止一不小心弄错了就麻烦了

原始的是B调用A,新的当然也就是D调用C了,修改完后,C编译正常,编译D的时候出现了错误提示,如下:

1>e:\dll\bcom\bcom.h(32): error C2470: “CComMgrBin”: 看起来像函数定义,但没有参数列表;跳过明显的函数体

我修改的时候主要是把相关的文件在UltraEdit中打开,然后候其中的类和包含的文件名,这样修改方便,不用到IDE中一个一个修改。

这个错误有点奇怪,原始的都好好的,为什么就修改了文件名和类名就不行了呢?

上网上查了查,基本确定是类CComMgrBin定义的附近有错误,但看不出问题,各符号都没有修改,不可能会变成全角或者中文的,在D中修改包含的C的头文件后再编译D工程,提示找不到头文件,说明包含的头文件也是没错的。

CComMgrBin的类定义如下:

... // 包含需要的头文件#ifdef BCOMBIN_EXPORTS#define BCOMBIN_API __declspec(dllexport)#else#define BCOMlBIN_API __declspec(dllimport)#endif// 此类是导出的,其它模块需要调用之class BCOMBIN_API CComMgrBin: public CMyTask{private:CComMgrBin();virtual ~CComMgrBin();... // 其它的接口和变量


根据提示,在编译完C之后,修改

class BCOMBIN_API CComMgrBin: public CMyTask

一行如下:

class CComMgrBin: public CMyTask

即把其中的BCOMBIN_API删除掉,然后编译D,结果通过!那确定就是这个定义有问题,再仔细检查

#ifdef BCOMBIN_EXPORTS#define BCOMBIN_API __declspec(dllexport)#else#define BCOMlBIN_API __declspec(dllimport)#endif

中的else分支才发现,其中多了一个“1”,即

#define BCOMlBIN_API __declspec(dllimport)

需要删除中间的“1”,修改后如下:

#define BCOMBIN_API __declspec(dllimport)

然后恢复

class BCOMBIN_API CComMgrBin: public CMyTask
再编译D通过!

原来是在手动修改 BCOMBIN_API 的时候,中间多写了一个字符1导致dllimport实际上没有被定义,所以在调用的模块中就认为是错误的了。


希望对大家有帮助


0 1
原创粉丝点击