This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Can a member variable be declared const in a class without initialization?

Note: This was originally posted on 5th January 2010 at http://forums.arm.com

I am trying to define a class providing an interface to hardware registers. Some of the registers are read-only. I would like to declare these registers const so they cannot be written, but the compiler is insisting I initialize them. But by initializing them, it is guranteed they will be written.

Does anyone have a solution to this dilemma?

Thanks.

Sincerely,
Steve.
Parents
  • Note: This was originally posted on 5th January 2010 at http://forums.arm.com

    I am trying to define a class providing an interface to hardware registers. Some of the registers are read-only. I would like to declare these registers const so they cannot be written, but the compiler is insisting I initialize them. But by initializing them, it is guranteed they will be written.

    Does anyone have a solution to this dilemma?

    Thanks.

    Sincerely,
    Steve.


    If this variable (hardware register in fact) is member of the class,
    I wonder how you will set it at its specific address. I follow a similar
    approach , somewhat different. Below is my I2C interface

    typedef volatile struct _S_DX_i2c_ptr{

       Ui32 _CONSET;
    const Ui32 _STAT;
       Ui32 _DAT;
       Ui32 _ADR;
       Ui32 _SCLH;
       Ui32 _SCLL;
       Ui32 _CONCLR;

    }S_DX_i2c_ptr;

    As you see I can declare some variables as const (as it should be).
    Then I just use a pointer (of this struct type) to access the I2C block.
    S_DX_i2c_ptr * I2C_dev = (S_DX_i2c_ptr *)I2C0_BASE_ADDR;
    You may have such a pointer in you class to access hardware
    registers and some will be R/W , some will be const.

    Good Day...
Reply
  • Note: This was originally posted on 5th January 2010 at http://forums.arm.com

    I am trying to define a class providing an interface to hardware registers. Some of the registers are read-only. I would like to declare these registers const so they cannot be written, but the compiler is insisting I initialize them. But by initializing them, it is guranteed they will be written.

    Does anyone have a solution to this dilemma?

    Thanks.

    Sincerely,
    Steve.


    If this variable (hardware register in fact) is member of the class,
    I wonder how you will set it at its specific address. I follow a similar
    approach , somewhat different. Below is my I2C interface

    typedef volatile struct _S_DX_i2c_ptr{

       Ui32 _CONSET;
    const Ui32 _STAT;
       Ui32 _DAT;
       Ui32 _ADR;
       Ui32 _SCLH;
       Ui32 _SCLL;
       Ui32 _CONCLR;

    }S_DX_i2c_ptr;

    As you see I can declare some variables as const (as it should be).
    Then I just use a pointer (of this struct type) to access the I2C block.
    S_DX_i2c_ptr * I2C_dev = (S_DX_i2c_ptr *)I2C0_BASE_ADDR;
    You may have such a pointer in you class to access hardware
    registers and some will be R/W , some will be const.

    Good Day...
Children
No data