我正在尝试将一个C++结构转换成C,但是一直得到“未声明的标识符”?C++是否有不同的引用结构的语法?
struct KEY_STATE
{
bool kSHIFT; //if the shift key is pressed
bool kCAPSLOCK; //if the caps lock key is pressed down
bool kCTRL; //if the control key is pressed down
bool kALT; //if the alt key is pressed down
};
我在另一个结构中使用了一个KEY_STATE类型的变量:
typedef struct _DEVICE_EXTENSION
{
WDFDEVICE WdfDevice;
KEY_STATE kState;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
导致标识符错误C2061:语法错误:标识符'KEY_STATE'
...on这行KEY_STATE kState;我正在用WDK编译器构建,如果这有什么不同的话。这当然是在一个头文件中。我正在将C++的WDM驱动程序移植到WDF和C。
This is the MSDN article for C2061。
初始化器可以用括号括起来。若要避免此问题,请将声明符括在圆括号中或将其设置为类型定义。
当编译器检测到表达式作为类模板参数时,也可能导致此错误;使用typename告诉编译器它是一个类型。
将KEY_STATE更改为typedef struct仍然会导致此错误,而且实际上会导致更多错误。没有空括号或有太多括号的东西,这是文章建议的另一件事。
发布于 2009-09-29 14:02:44
在C中,类型的名称是struct KEY_STATE
。
因此您必须将第二个结构声明为
typedef struct _DEVICE_EXTENSION
{
WDFDEVICE WdfDevice;
struct KEY_STATE kState;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
如果您不想一直编写struct
,则可以使用类似于DEVICE_EXTENSION
的typedef声明KEY_STATE
typedef struct _KEY_STATE
{
/* ... */
} KEY_STATE;
发布于 2009-09-29 14:10:23
在C99之前的C中没有bool
类型。
此外,当您执行struct KEY_STATE
时,没有名为KEY_STATE
的类型。
试着这样做:
typedef struct _KEY_STATE
{
unsigned kSHIFT : 1; //if the shift key is pressed
unsigned kCAPSLOCK : 1; //if the caps lock key is pressed down
unsigned kCTRL : 1; //if the control key is pressed down
unsigned kALT : 1; //if the alt key is pressed down
} KEY_STATE;
发布于 2009-09-29 14:02:35
您需要使用struct KEY_STATE
引用KEY_STATE
。在C++中,您可以省略struct
,但不能在纯C中省略。
另一种解决方案是使用类型别名:
typedef struct KEY_STATE KEY_STATE
现在,KEY_STATE
和struct KEY_STATE
的含义是一样的
https://stackoverflow.com/questions/1492735
复制相似问题