Differences between struct in C and C++

后端 未结 5 2142
鱼传尺愫
鱼传尺愫 2020-12-20 11:55

I am trying to convert a C++ struct to C but keep getting "undeclared identifier"? Does C++ have a different syntax for referring to structs?

struc         


        
相关标签:
5条回答
  • 2020-12-20 12:17

    You need to refer to KEY_STATE with struct KEY_STATE. In C++ you can leave the struct out, but not in plain C.

    Another solution is to do a type alias:

    typedef struct KEY_STATE KEY_STATE

    Now KEY_STATE means the same thing as struct KEY_STATE

    0 讨论(0)
  • 2020-12-20 12:21

    In C, the name of the type is struct KEY_STATE.

    So you have to declare the second struct as

    typedef struct _DEVICE_EXTENSION
    {
        WDFDEVICE WdfDevice;
        struct KEY_STATE kState;
    } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
    

    If you do not want to write struct all the time, you can use a typedef declare KEY_STATE similar to DEVICE_EXTENSION:

    typedef struct _KEY_STATE
    {
        /* ... */
    } KEY_STATE;
    
    0 讨论(0)
  • 2020-12-20 12:23

    You could/should typedef the struct so that you don't need the struct keyword every time you will declare a variable of that type.

    typedef 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;
    

    Now you can do:

    KEY_STATE kState;
    

    or (as in the example you have) :

    struct KEY_STATE kState;
    
    0 讨论(0)
  • 2020-12-20 12:24

    You have to qualify a struct variable with the 'struct' keyword:

    typedef struct _DEVICE_EXTENSION
    {
        WDFDEVICE WdfDevice;
        struct KEY_STATE kState;
    } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
    

    When you use DEVICE_EXTENSION you don't have to do use 'struct' because you are doing a struct definition and a typedef in a single compound statement. So you could do the same for KEY_STATE if you wanted to use it in a similar fasion:

    typedef struct _KEY_STATE_t
    {
        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;
    
    0 讨论(0)
  • 2020-12-20 12:35

    There is no bool type in C prior to C99.

    Also, there is no type called KEY_STATE when you do struct KEY_STATE.

    Try this instead:

    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;
    
    0 讨论(0)
提交回复
热议问题