initializer element is not constant problem

Gast #6582559
Lesenswert?

Hallo,
ich habe ein Problem, wo ich nicht weiterkomme.
1
tpedef struct
2
{
3
  uint16_t lowerLimit;
4
  uint16_t upperLimit;
5
}sensorLimit_ts
6

7
typedef struct
8
{
9
  sensorLimit_ts sensorLimit_s[2]
10
}sensorLimitParameter_ts
11

12
typedef struct
13
{
14
  const senorName_e name;
15
  sensorLimit_ts limit;
16
}sensorInformation_ts
17

18
const sensorLimitParameter_ts sensorLimit
19
{
20
  .sensorLimit_s[0] =
21
  {
22
    .lowerLimit = 0,
23
    .upperLimit = 10000,
24
  },
25
  .sensorLimit_s[1] =
26
  {
27
    .lowerLimit = 0,
28
    .upperLimit = 10000,
29
  }
30
};
31

32
static sensorInformation_ts sensorInfo_as[2]=
33
{
34
  {
35
    PRESSURE_SENSOR_1,
36
    sensorLimit.sensorLimit_s[0],
37
  },
38
  {
39
    PRESSURE_SENSOR_2,
40
    sensorLimit.sensorLimit_s[1],
41
  }
42
}

ich bekomme bei der definition von sensorInfo_as den fehler "initializer 
element is not constant" auf sensorLimit.sensorLimit_s[0] und 
sensorLimit.sensorLimit_s[1]
#6582584
Lesenswert?

Ja, das geht so nicht. Mit oder ohne const, der Wert von sensorLimit, 
und damit auch sensorLimit.sensorLimit_s[0], ist beim Kompilieren noch 
nicht bekannt. Dessen Adresse könnte man aber verwenden 
(&sensorLimit.sensorLimit_s[0]).
Das const repräsentiert eher Readonly als Constante.
Beitrag #6583115 wurde von einem Moderator gelöscht.
Gast #6583892
Lesenswert?

Oliver S. schrieb:
> Die ganze Typenhierarchie ist doch völlig aua. Wofür brauchst du
> die
> ganzen structs mit den limits, wenn letzendlich ein Sensor nur genau ein
> lower- und ein upper limit hat.
>
> Schreib die direkt hin, und gut ist.

Das KISS Prinzip gerät immer mehr in Vergessenheit in der IT. Man will 
ja allen zeigen was für ein toller Hecht ist. ;-) Struct hier, template 
dort, abstrakte Basisklasse muss auch immer sein, getter setter.... 
usw...usf... :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren