Forum: Compiler & IDEs Struktur von Arrays


von Martin S. (sv_martin)


Angehängte Dateien:

Lesenswert?

Freitag Abend und ich hock vor'm Rechner
n'Abend an alle

Die angehängte Datei ist vorerst zweitraning

Die aufgeschlagene Buchseite
http://openbook.galileocomputing.de/c_von_a_bis_z/015_c_strukturen_006.htm#mj558e0e4fc0892fc3f91cd810f7c07860
1
void Eingabe(int nr, struct adres neu[])

funktioniert im Visual Studio

möchte ich auf meinen Atmega 16 portierne
AVR Studio 4.18

meine Codezeile die ich eben nach Buch angepasst habe
1
void verstellen(int nr, struct wecken neu[] )
in Zeile 83 des Dateianhangs

und hier erhalte ich folgende Fehlermeldung

../A8_LCD_T2.c:83: error: array type has incomplete element type

Danke schon mal

von Karl H. (kbuchegg)


Lesenswert?

Reihenfolge:

Geh dein File von oben nach unten durch, so wie es auch der Compiler 
macht.

1
Geplänken, Geplänkel, Geplänkel
2
3
void verstellen(int nr, struct wecken neu[]);

Hier verwendest du eine Struktur namesns wecken. Aber wo ist sie 
definiert?
1
int main()
2
{
3
4
  Geplänkel, Geplänkel, Geplänkel
5
6
7
// Meine erste Stuctur soll die Weckzeiten der gesamten Woche aufnehmen aufnehmen 
8
  struct wecken
9
  {  
10
    uint8_t tag;
11
    uint8_t stunde;                      
12
    uint8_t minute;                        
13
  }morgen[7];

Aha. Hier ist sie definiert. Aber da ist es zu spät. Du versuchst sie 
schon weiter oben zu verwenden.

Wenn man den Code von oben nach unten durchgeht, muss alles 
definiert/deklariert werden, ehe man es verwenden kann. Genau so macht 
es auch der Compiler. Der sucht sich nicht aus dem Code heraus, wie das 
alles zusammenhängt, sondern er liest den Text von oben nach unten.

von Martin S. (sv_martin)


Lesenswert?

Danke für den Tip, ist wenn man draufgestoßen wird vollkommen klar.

jetzt
1
char aktuelleUhrzeit( uint8_t sekunde, uint8_t minute, uint8_t stunde);
2
char weckzeit(uint8_t minute, uint8_t stunde, uint8_t tag);
3
4
// Meine erste Stuctur soll die Weckzeiten der gesamten Woche aufnehmen aufnehmen 
5
  struct wecken
6
  {  
7
    uint8_t tag;
8
    uint8_t stunde;                      
9
    uint8_t minute;                        
10
  }morgen[7];
11
// A C H T U N G   auch hier kann ein "einZuVielFehler" auftretten Index beginnt bei 0 ... 6
12
13
void verstellen(int nr, struct wecken neu[]);

nachdem die "struct" vor der main deklariert wurde ist sie doch global??
AH!
Das könnte der Grund sein warum Ihr Proficoder die Funktionen vor der 
main erzeugt.
Im Gegensatz zum Schul C Bekannt machen  und nach der main erzeugen.

Jetzt brennt mir aber eine weiter Frage auf den Lippen.
1
void verstellen(int nr, struct wecken neu[]);
ist die "int nr" in der
1
#include <string.h>
 irgenwie festgelegt ?
Diese Variable läßt der COmpiler einfach passieren.

von Nico S. (nico22)


Lesenswert?

Martin Sv schrieb:
> Diese Variable läßt der COmpiler einfach passieren.

Warum sollte er nicht? Ein int gehört zu C-Bordmitteln dazu. Deine 
selbstgebastelte Struct aber nicht, weswegen sie erst bekannt gemacht 
werden muss. Wie ein int aussieht, weiß dein Compiler immer.

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.