Forum: PC-Programmierung initializer element is not constant problem


von Jens (Gast)


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]

von Daniel A. (daniel-a)


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.

von cppbert3 (Gast)


Lesenswert?

am besten ist immer ein gesharetes Beispiel bei gcc.godbolt.org das auch 
kompiliert

Es ist nicht ganz klar was von deinem Code statisch oder dynamisch ist

Beitrag #6583115 wurde von einem Moderator gelöscht.
von Oliver S. (oliverso)


Lesenswert?

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.

Oliver

: Bearbeitet durch User
von BobbyX (Gast)


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... :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.