mikrocontroller.net

Forum: Compiler & IDEs Struktur von Arrays


Autor: Martin Sv (sv_martin)
Datum:
Angehängte Dateien:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reihenfolge:

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

Geplänken, Geplänkel, Geplänkel

void verstellen(int nr, struct wecken neu[]);

Hier verwendest du eine Struktur namesns wecken. Aber wo ist sie 
definiert?
int main()
{

  Geplänkel, Geplänkel, Geplänkel


// Meine erste Stuctur soll die Weckzeiten der gesamten Woche aufnehmen aufnehmen 
  struct wecken
  {  
    uint8_t tag;
    uint8_t stunde;                      
    uint8_t minute;                        
  }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.

Autor: Martin Sv (sv_martin)
Datum:

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

jetzt

char aktuelleUhrzeit( uint8_t sekunde, uint8_t minute, uint8_t stunde);
char weckzeit(uint8_t minute, uint8_t stunde, uint8_t tag);

// Meine erste Stuctur soll die Weckzeiten der gesamten Woche aufnehmen aufnehmen 
  struct wecken
  {  
    uint8_t tag;
    uint8_t stunde;                      
    uint8_t minute;                        
  }morgen[7];
// A C H T U N G   auch hier kann ein "einZuVielFehler" auftretten Index beginnt bei 0 ... 6

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.
void verstellen(int nr, struct wecken neu[]);
ist die "int nr" in der
#include <string.h>
 irgenwie festgelegt ?
Diese Variable läßt der COmpiler einfach passieren.

Autor: Nico Sch. (nico22)
Datum:

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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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