Forum: Compiler & IDEs Problem mit struct


von Michael (Gast)


Lesenswert?

Hallo!

Ich möchte wegen der besseren Übersicht ein struct verwenden.
Leider scheint der GCC-Compiler damit nich zurecht zu kommen.
Hier mal der Code:
1
struct font
2
{
3
       uint8_t width;
4
       uint8_t height;
5
};
6
7
struct font smallfont;
8
9
smallfont.width = 5;     //*
10
smallfont.height = 8;    //*

Es kommt dieser Fehler, bei den mit "//*" gekenntzeichneten Zeilen 
zustande:
1
error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token

Was mach ich falsch?
Danke
Michael

von remote1 (Gast)


Lesenswert?

schreib einfach mal statt:
  struct font smallfont;
einfach nur
  font smallfont;

der compiler denkt evtl. dasss du eine neue struct machen willst

von Michael (Gast)


Lesenswert?

Leider negativ.

Da kommt der gleiche Fehler wie bei den anderen beiden Zeilen.

von Oliver (Gast)


Lesenswert?

Build succeeded with 0 Warnings...

Poste mal dein vollständiges Programm. Da muß ein anderer Fehler drin 
sein.

Oliver

von johnny.m (Gast)


Lesenswert?

Sicher, dass der eigentliche Fehler nicht vor den gekennzeichneten 
Zeilen liegt? An der Deklaration der struct gibts imho nix 
auszusetzen...

von Stefan K. (_sk_)


Lesenswert?

So mache ich es:
1
typedef const struct{
2
  uint8_t x;
3
  uint8_t y;
4
  uint8_t g[];
5
} graphik_typ, *graphik_ptr;
6
7
8
extern const graphik_typ lcd_fnt1;

Gruß, Stefan

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal der ganze Code.
Vorher steht eigentlich nur ne include....
An der wirds ja nicht liegen.
Lösche ich die betreffenden Zeilen compiled er ohne Probleme.

Michael

von Stefan K. (_sk_)


Lesenswert?

ahem ...

WO machst Du denn das hier:
1
smallfont.width = 5;
2
smallfont.height = 8;

Das geht vielleicht in Basic, aber in C darfst Du das NUR innerhalb 
einer Funktion machen.

Wenn Du Deine struct initliaisieren willst, dann mach das so:
1
struct font_typ
2
{
3
  uint8_t width;
4
  uint8_t height;
5
};
6
7
struct font_typ smallfont = {5, 8};
P.S.:
Schau Dir mal mein Beispiel oben an. Dort ist in der struct noch ein Ptr 
auf die Graphikdaten. Genauso kannst Du es auch mit Deinem Font machen. 
Dann hast Du Größe und Graphikdaten Deines Fonts nur über Deine struct 
erreichbar:
1
// der Font muss zuerst deklariert werden (oder forward):
2
3
const uint8_t font5x8[]PROGMEM= { 
4
0x00,0x00,0x00,0x00,0x00,  // 0x00
5
6
struct font
7
{
8
  uint8_t width;
9
  uint8_t height;
10
        uint8_t fnt_data[];
11
};
12
13
struct font smallfont = {
14
  5,
15
  8,
16
  font5x8
17
};

Gruß, Stefan

von Michael (Gast)


Lesenswert?

Hallo!

Ich bin mir ziemlich sicher, dass ich das so auch in C verwenden darf.
Oliver kanns ja auch ohne Fehler compilen.
Kann das jemand bestätigen?

Naja wie auch immer. Das hier funktioniert jetzt scheinbar:
1
struct font_typ smallfont = {5, 8};

Danke dafür! :)

Michael

von Stefan K. (_sk_)


Lesenswert?

Dann nimm mal Deinen Code von oben und schreib eine Funktion drumrum:
1
void font_init(void){
2
    smallfont.width = 5;
3
    smallfont.height = 8;
4
}

>Ich bin mir ziemlich sicher

Da ist beim Programmieren eine der häufigsten Fehlerquellen ;-)

Gruß, Stefan

von Oliver (Gast)


Lesenswert?

"Ich bin mir ziemlich sicher, dass ich das so auch in C verwenden darf."
Nö. Darfst du nicht.

"Oliver kanns ja auch ohne Fehler compilen."
Nö. Kann ich nicht. Ich hatte das selbstverständlich innerhalb von 
main() getestet.

Globale Initialisierung geht so:
1
struct font smallfont = {5,8};
Oliver

von Michael (Gast)


Lesenswert?

Ok wieder was gelernt! Danke ;)
Michael

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.