首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C和C++中结构的区别

C和C++中结构的区别
EN

Stack Overflow用户
提问于 2009-09-29 13:59:50
回答 5查看 3.2K关注 0票数 15

我正在尝试将一个C++结构转换成C,但是一直得到“未声明的标识符”?C++是否有不同的引用结构的语法?

代码语言:javascript
复制
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类型的变量:

代码语言:javascript
复制
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仍然会导致此错误,而且实际上会导致更多错误。没有空括号或有太多括号的东西,这是文章建议的另一件事。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-09-29 14:02:44

在C中,类型的名称是struct KEY_STATE

因此您必须将第二个结构声明为

代码语言:javascript
复制
typedef struct _DEVICE_EXTENSION
{
    WDFDEVICE WdfDevice;
    struct KEY_STATE kState;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

如果您不想一直编写struct,则可以使用类似于DEVICE_EXTENSION的typedef声明KEY_STATE

代码语言:javascript
复制
typedef struct _KEY_STATE
{
    /* ... */
} KEY_STATE;
票数 30
EN

Stack Overflow用户

发布于 2009-09-29 14:10:23

在C99之前的C中没有bool类型。

此外,当您执行struct KEY_STATE时,没有名为KEY_STATE的类型。

试着这样做:

代码语言:javascript
复制
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;
票数 16
EN

Stack Overflow用户

发布于 2009-09-29 14:02:35

您需要使用struct KEY_STATE引用KEY_STATE。在C++中,您可以省略struct,但不能在纯C中省略。

另一种解决方案是使用类型别名:

typedef struct KEY_STATE KEY_STATE

现在,KEY_STATEstruct KEY_STATE的含义是一样的

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1492735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档