Forum: PC-Programmierung initializer element is not constant problem


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jens (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.