typedef 枚举类型 VC中引用时报错?

tudou524342451 2016-07-20 10:25:07
在外部文件IPinpad.h中有如下定义
typedef enum { 
MAC_X9 = 0x00 //X9.9
, MAC_X919 = 0x01 //X9.19
, MAC_PSAM = 0x02 //PSAM
, MAC_PBOC = 0x03 //PBOC
, MAC_CBC = 0x04 //CBC(ISO 16609)
, MAC_BANKSYS = 0x05 //Bank system
, AES_CMAC = 0x06 //AES-CMAC-PRF-128
, AES_XCBC = 0x07 //AES-XCBC-PRF-128
, SM4MAC_PBOC = 0x08 //PBOC
, SM4MAC_BANKSYS = 0x09 //Bank system
} EMAC;


我在VC工程中的DriverWrapper.h中这样写:

#include "IPinpad.h"

short DATACrypt(int iKeySolt, ECRYPT eMode, const BYTE* lpDataIn, WORD wInLen, BYTE* lpOutData,
bool bEncrypt, const LPBYTE lpIVdata);

可是编译的时候出现错误:
e:\svnsvn\sp1.4\04源码\代码\04 pin\cwsppinzt598bgm\driverwrapper.h(224) : error C2061: syntax error : identifier 'EMAC'
这个是什么问题 啊
...全文
334 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
tudou524342451 2016-07-28
  • 打赏
  • 举报
回复
引用 16 楼 tudou524342451 的回复:
[quote=引用 8 楼 schlafenhamster 的回复:] 把 typedef enum copy 到 。h 试试
现在问题是,我之前用的枚举类型作为函数参数,这些函数都是放在类里面,然后编译就会报上述错误。我直接在类外面作为全局函数的时候,就没问题,编译没错误。[/quote] 头文件是这样的定义的,是直接在文件定义的,没包含在类里面,这个函数是动态库头文件定义的。 typedef enum { MAC_X9 = 0x00 //X9.9 , MAC_X919 = 0x01 //X9.19 , MAC_PSAM = 0x02 //PSAM , MAC_PBOC = 0x03 //PBOC , MAC_CBC = 0x04 //CBC(ISO 16609) , MAC_BANKSYS = 0x05 //Bank system , AES_CMAC = 0x06 //AES-CMAC-PRF-128 , AES_XCBC = 0x07 //AES-XCBC-PRF-128 , SM4MAC_PBOC = 0x08 //PBOC , SM4MAC_BANKSYS = 0x09 //Bank system } EMAC; 我静态引用的库,然后包含了这个文件,现在我用的时候是在一个类里面定义成员函数参数时用到了这个枚举类型,如下: int CALCMac(int keyNO,EMAC iMode,const BYTE* pucValue,int iValLength,BYTE *pucData,LPBYTE IVData,int IVLength); VC6编译报错e:\svnsvn\sp1.4\04源码\代码\04 pin\cwsppinzt598bgm1\driverwrapper.h(223) : error C2061: syntax error : identifier 'EMAC'。
tudou524342451 2016-07-28
  • 打赏
  • 举报
回复
引用 19 楼 SXJIAKE 的回复:
如果按你所说,声明函数时要写成:
short DATACrypt(
	int iKeySolt,
	XXX::EMAC eMode,
	const BYTE* lpDataIn,
	WORD wInLen,
	BYTE* lpOutData, 
	bool bEncrypt,
	const LPBYTE lpIVdata
);
XXX 就是那个类名。
头文件是这样的定义的,是直接在文件定义的,没包含在类里面,这个函数是动态库头文件定义的。 typedef enum { MAC_X9 = 0x00 //X9.9 , MAC_X919 = 0x01 //X9.19 , MAC_PSAM = 0x02 //PSAM , MAC_PBOC = 0x03 //PBOC , MAC_CBC = 0x04 //CBC(ISO 16609) , MAC_BANKSYS = 0x05 //Bank system , AES_CMAC = 0x06 //AES-CMAC-PRF-128 , AES_XCBC = 0x07 //AES-XCBC-PRF-128 , SM4MAC_PBOC = 0x08 //PBOC , SM4MAC_BANKSYS = 0x09 //Bank system } EMAC; 我静态引用的库,然后包含了这个文件,现在我用的时候是在一个类里面定义成员函数参数时用到了这个枚举类型,如下: int CALCMac(int keyNO,EMAC iMode,const BYTE* pucValue,int iValLength,BYTE *pucData,LPBYTE IVData,int IVLength); VC6编译报错e:\svnsvn\sp1.4\04源码\代码\04 pin\cwsppinzt598bgm1\driverwrapper.h(223) : error C2061: syntax error : identifier 'EMAC'。
tudou524342451 2016-07-28
  • 打赏
  • 举报
回复
引用 18 楼 cutmelon 的回复:
[quote=引用 16 楼 tudou524342451 的回复:] [quote=引用 8 楼 schlafenhamster 的回复:] 把 typedef enum copy 到 。h 试试
现在问题是,我之前用的枚举类型作为函数参数,这些函数都是放在类里面,然后编译就会报上述错误。我直接在类外面作为全局函数的时候,就没问题,编译没错误。[/quote]那估计是你这个类有问题,头文件贴出来看看吧[/quote] 头文件是这样的定义的,是直接在文件定义的,没包含在类里面,这个函数是动态库头文件定义的。 typedef enum { MAC_X9 = 0x00 //X9.9 , MAC_X919 = 0x01 //X9.19 , MAC_PSAM = 0x02 //PSAM , MAC_PBOC = 0x03 //PBOC , MAC_CBC = 0x04 //CBC(ISO 16609) , MAC_BANKSYS = 0x05 //Bank system , AES_CMAC = 0x06 //AES-CMAC-PRF-128 , AES_XCBC = 0x07 //AES-XCBC-PRF-128 , SM4MAC_PBOC = 0x08 //PBOC , SM4MAC_BANKSYS = 0x09 //Bank system } EMAC; 我静态引用的库,然后包含了这个文件,现在我用的时候是在一个类里面定义成员函数参数时用到了这个枚举类型,如下: int CALCMac(int keyNO,EMAC iMode,const BYTE* pucValue,int iValLength,BYTE *pucData,LPBYTE IVData,int IVLength); VC6编译报错e:\svnsvn\sp1.4\04源码\代码\04 pin\cwsppinzt598bgm1\driverwrapper.h(223) : error C2061: syntax error : identifier 'EMAC'。
sevancheng 2016-07-21
  • 打赏
  • 举报
回复
很可能是头文件其它地方有错误,找提供头文件的提供Demo吧
tudou524342451 2016-07-21
  • 打赏
  • 举报
回复
引用 9 楼 cutmelon 的回复:
引用 7 楼 tudou524342451 的回复:
刚才看了,工程文件夹就一个IPinpad.h,标点符号没问题啊,弄了一上午,还没结果
你把include那里改成绝对路径看看?
这个是厂家给的配对应动态库的头文件,我直接拿过来放在工程目录下了,没进行改动,今天试了还是这个问题。
「已注销」 2016-07-21
  • 打赏
  • 举报
回复
如果按你所说,声明函数时要写成:
short DATACrypt(
	int iKeySolt,
	XXX::EMAC eMode,
	const BYTE* lpDataIn,
	WORD wInLen,
	BYTE* lpOutData, 
	bool bEncrypt,
	const LPBYTE lpIVdata
);
XXX 就是那个类名。
cutmelon 2016-07-21
  • 打赏
  • 举报
回复
引用 16 楼 tudou524342451 的回复:
[quote=引用 8 楼 schlafenhamster 的回复:] 把 typedef enum copy 到 。h 试试
现在问题是,我之前用的枚举类型作为函数参数,这些函数都是放在类里面,然后编译就会报上述错误。我直接在类外面作为全局函数的时候,就没问题,编译没错误。[/quote]那估计是你这个类有问题,头文件贴出来看看吧
schlafenhamster 2016-07-21
  • 打赏
  • 举报
回复
枚举类型 放 类里 然后 Cxxxx::EMAC 如 CFile::modeRead
tudou524342451 2016-07-21
  • 打赏
  • 举报
回复
引用 8 楼 schlafenhamster 的回复:
把 typedef enum copy 到 。h 试试
现在问题是,我之前用的枚举类型作为函数参数,这些函数都是放在类里面,然后编译就会报上述错误。我直接在类外面作为全局函数的时候,就没问题,编译没错误。
tudou524342451 2016-07-21
  • 打赏
  • 举报
回复
引用 12 楼 chengbar 的回复:
很可能是头文件其它地方有错误,找提供头文件的提供Demo吧
现在问题是,我之前用的枚举类型作为函数参数,这些函数都是放在类里面,然后编译就会报上述错误。我直接在类外面作为全局函数的时候,就没问题,编译没错误。
tudou524342451 2016-07-21
  • 打赏
  • 举报
回复
引用 12 楼 chengbar 的回复:
很可能是头文件其它地方有错误,找提供头文件的提供Demo吧
现在问题是,我之前用的枚举类型作为函数参数,这些函数都是放在类里面,然后编译就会报上述错误。我直接在类外面作为全局函数的时候,就没问题,编译没错误。
「已注销」 2016-07-21
  • 打赏
  • 举报
回复
估计头文件宏名称冲突了,导致根本没包含进去。
cutmelon 2016-07-20
  • 打赏
  • 举报
回复
语法上没错的,会不会是你有两个IPinpad.h,其中一个有问题?
tudou524342451 2016-07-20
  • 打赏
  • 举报
回复
没有啊,刚才这个头文件IPinpad.h是厂家给的动态库头文件,我用MFC动态库工程,然后直接把这个头文件给包进来了。
Eleven 2016-07-20
  • 打赏
  • 举报
回复
如果你#include相关的.h文件没有问题的话,这句中有没有什么其他非法的字符,比如中文全角字符,如逗号什么的
tudou524342451 2016-07-20
  • 打赏
  • 举报
回复
short DataMac(int iKeySolt, EMAC iMacMode,const BYTE *pucValue, int iValLength, BYTE *pucMac,LPBYTE lpIVdata); 是这个函数,都是第二个变量有问题,
schlafenhamster 2016-07-20
  • 打赏
  • 举报
回复
typedef enum { MAC_X9 = 0x00 //X9.9 , MAC_X919 = 0x01 //X9.19 , MAC_PSAM = 0x02 //PSAM , MAC_PBOC = 0x03 //PBOC , MAC_CBC = 0x04 //CBC(ISO 16609) , MAC_BANKSYS = 0x05 //Bank system , AES_CMAC = 0x06 //AES-CMAC-PRF-128 , AES_XCBC = 0x07 //AES-XCBC-PRF-128 , SM4MAC_PBOC = 0x08 //PBOC , SM4MAC_BANKSYS = 0x09 //Bank system } EMAC; short DATACrypt(int iKeySolt, EMAC eMode, const BYTE* lpDataIn, WORD wInLen, BYTE* lpOutData, bool bEncrypt, const LPBYTE lpIVdata); 没错 !
Eleven 2016-07-20
  • 打赏
  • 举报
回复
driverwrapper.h(224) : error C2061: syntax error : identifier 'EMAC' 这里的driverwrapper.h(224) 是哪句? 指的是这句short DATACrypt(int iKeySolt, ECRYPT eMode, 。。。);吗?你这个函数中参数中又没有用EMAC枚举变量做参数?
cutmelon 2016-07-20
  • 打赏
  • 举报
回复
引用 9 楼 cutmelon 的回复:
引用 7 楼 tudou524342451 的回复:
刚才看了,工程文件夹就一个IPinpad.h,标点符号没问题啊,弄了一上午,还没结果
你把include那里改成绝对路径看看?
忽然又想起一种因为拷贝导致这种问题的情况,比方说有头文件a.h
#ifndef _A_H_
#define _A_H_

struct A
{
	...
};

#endif
还有头文件b.h,用a.h拷过去改的,忘改#define了
#ifndef _A_H_
#define _A_H_

struct B
{
	...
};

#endif
这时候就看先include哪个文件了。。。后一个肯定是无效的
cutmelon 2016-07-20
  • 打赏
  • 举报
回复
引用 7 楼 tudou524342451 的回复:
刚才看了,工程文件夹就一个IPinpad.h,标点符号没问题啊,弄了一上午,还没结果
你把include那里改成绝对路径看看?
加载更多回复(2)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧