Moin zusammen,
ich bin gerade dabei eine Menüführung zu gestalten.
Hier meine folgende Überlegung:
Ich habe zwei Strukturen
> struct {> void (*Show_Func)(void); //Zeigt den Namen oder den Wert> void (*Operate_func)(void); //Geht in das entprechende Untermenü> }Menueeintrag;> struct {> uint8_t Eintraege;> struct Menueeintrag SubMenues[];> }Menue;
AllMenues[0]-MainMenue
+--------------------+
| Eintraege 4 |
| (Menueeintrag)Submenues o---------------
+--------------------+ |
| v
| Submenues[0]
v +--------------------+
(ALLMenues[1]) |&Show_String (Fkt-Ptr)
|&Go_Into (Fkt-Ptr)
+--------------------+
|
|
v
Submenues[1]
AllMenues[0] ist beispielsweise das Hauptmenue, wobei Submenue[0] bsp ds
Einstellungsmenue ist, wo entweder der String angezeigt wird oder in das
Menue Einstellungen gegangen wird (Die Go_Into Funktion springt dann in
ALLMenues[1].
Soweit meine Überlegungen. Wenn ich versuche dieses Diagramm in C zu
prgrammieren, dann mekkert er leider an einigen Stellen - doch finde ich
den Fehler leider nicht :( - Wäre nett wenn ihr mir dabei helfen
könntet.
struct Menue AllMenues[2] =
{
{//Hauptmenue
.Eintraege = 2
.SubMenues[2] //request for member 'SubMenues' in something not a
//structure or union
{ //expected expression before '{' token
{//OPTIONS
.Show_Func = &Show_String;
.Operate_Func = &Go_Into;
}
{//SLEPP-Mode
.Show_Func = &Show_String;
.Operate_Func = &Display_OFF;
}
}
},
{//Einstellungen //extra brace group at end of initializer
//(near initialization for 'AllMenues[0]')
.Eintraege = 2;
.Submenues[2] //request for member 'SubMenues' in something not a
//structure or union
{ //expected '}' before '{' token
{//Datum ändern
.Show_Func = &Show_String;
.Operate_Func = &Change_Date;
}
{//Zurueck
.Show_Func = &Show_String;
.Operate_Func = &Go_Back;
}
}
}
};
Vielen Dank im Vorraus :)
Nö.
Kein Quelltext, keine Fehlerbeschreibung, keine Hilfe.
Anm: "mekkert er leider an einigen Stellen" ist keine Meldung
vom Compiler.
(Gibt es eigentlich überhaupt noch jemanden, der so fragt,
daß man auch eine Chance hat zu helfen?
Immerhin: lesbar, ordentlich geschrieben, und ich habe auch
eine Ahnung, was falsch ist. Aber das wäre genau genommen
Spekulation bei der Beschreibung...)
void(*Show_Func)(void);//Zeigt den Namen oder den Wert
3
void(*Operate_func)(void);//Geht in das entprechende Untermenü
4
}Menueeintrag;
Das definiert eine Variable namens Menueeintrag von einem nicht näher
genannten (anonymen) struct Datentyp.
Du willst aber eigentlich einen Datentyp namens Menueeintrag kreieren,
dessen Strukturaufbau beschrieben wird.
1
structMenueeintrag{
2
void(*Show_Func)(void);//Zeigt den Namen oder den Wert
3
void(*Operate_Func)(void);//Geht in das entprechende Untermenü
4
};
Hier hast du Pech
1
structMenue{
2
uint8_tEintraege;
3
structMenueeintragSubMenues[];
4
};
Du kannst hier nicht ein nicht näher in der Größe bezeichnetes Array
benutzen.
1
{//OPTIONS
2
.Show_Func=&Show_String;
3
.Operate_Func=&Go_Into;
4
}
Initialisierungen werden mit , getrennt
1
#include<stdint.h>
2
3
structMenueeintrag{
4
void(*Show_Func)(void);//Zeigt den Namen oder den Wert
5
void(*Operate_Func)(void);//Geht in das entprechende Untermenü
6
};
7
8
voidShow_String(void);
9
voidGo_Into(void);
10
voidDisplay_OFF(void);
11
voidChange_Date(void);
12
voidGo_Back(void);
13
14
structMenue{
15
uint8_tEintraege;
16
structMenueeintragSubMenues[2];
17
};
18
19
structMenueAllMenues[2]=
20
{
21
{//Hauptmenue
22
.Eintraege=2,
23
.SubMenues=//request for member 'SubMenues' in something not a
24
//structure or union
25
{//expected expression before '{' token
26
27
{//OPTIONS
28
.Show_Func=&Show_String,
29
.Operate_Func=&Go_Into
30
},
31
32
{//SLEPP-Mode
33
.Show_Func=&Show_String,
34
.Operate_Func=&Display_OFF
35
}
36
}
37
},
38
39
{//Einstellungen //extra brace group at end of initializer
40
//(near initialization for 'AllMenues[0]')
41
42
43
.Eintraege=2,
44
.SubMenues=//request for member 'SubMenues' in something not a
Vielen Dank Karl Heinz :)
Interessant,dass du meine Frage perfekt antworten konntest, Klaus
Wachtler jedoch Probleme hatte meine Fragestellung zu finden.
PS: Diese Strukturdarstellung hatte ich aus einem früheren Beitrag von
dir zum Thema Struktur :)
Karl heinz Buchegger schrieb:
> Hier hast du Pech
Dann werde ich wohl für jedes Menue Hauptmenue, Einstellungen.. ein
weiteres Menue erzeugen
An Klaus:
Die Stellen hatte ich doch exta per Kommentar eingefügt und das ist eine
komplette Headerdatei - also Quelltext ist vorhanden. Wie kann ich
besser machen?
Wie füge ich denn in meine Fragestellung das Syntaxhighliting von C ein?
Vielen Dank Marcel
Marcel schrieb:
> Wie füge ich denn in meine Fragestellung das Syntaxhighliting von C ein?
Packe ihn in C-Quotes, unter Formatierung kannst du es nachlesen.
Bsp:
Aus
Marcel schrieb:
> Vielen Dank Karl Heinz :)>> Interessant,dass du meine Frage perfekt antworten konntest, Klaus> Wachtler jedoch Probleme hatte meine Fragestellung zu finden.
Weil ich gar nicht erst lange gesucht habe.
Du hast minimale Fragemente deines Programms geliefert.
KHB hat sich die Mühe gemacht, darin zu suchen. hätte ich auch
machen können. Er hat da wohl mehr Geduld als ich - siehe
die ganzen anderen missratenen Threads z.B. von heute.
Warum habe ich nicht lange gesucht?
Weil ich von jemandem, der hier für lau Hilfe erwartet, auch
etwas erwarte:
- Das Problem möglichst weit reduzieren, damit sich jemand
leicht zurecht findet, ohne sich durch Ballast zu quälen
- Dazu den vollständigen Quelltext liefern
- Weiterhin den Fehler ordentlich beschreiben (nicht "geht nicht"
oder "Compiler meckert", sondern exakte Fehlermeldung des Compilers
mit Angabe der Zeile)
- Das ganze ordentlich und lesbar beschreibt (hattest du ja, nur
der Vollständigkeit halber)
Das würde die Suche deutlich beschleunigen, aber macht das Fragen
schwerer.
Das finde ich fair, wenn jemand andere Leute beschäftigt.
> ...>> An Klaus:>> Die Stellen hatte ich doch exta per Kommentar eingefügt und das ist eine> komplette Headerdatei - also Quelltext ist vorhanden. Wie kann ich> besser machen?
Siehe oben: genaue Meldungen des Compilers, komplette (aber
möglichst eingedampfte) Quelltexte.
>> Wie füge ich denn in meine Fragestellung das Syntaxhighliting von C ein?
Mit
1
[c]
2
... C-Quelltext ...
3
[/c]
Steht übrigens direkt über dem eigenen Beitrag, wenn man postet.
>> Vielen Dank Marcel
Klaus Wachtler schrieb:
> KHB hat sich die Mühe gemacht, darin zu suchen. hätte ich auch> machen können. Er hat da wohl mehr Geduld als ich - siehe> die ganzen anderen missratenen Threads z.B. von heute.
Ich bin aus der Fehlermeldung nicht schlau geworden. Also hab ich das
Fragment in ein AVR Studio kopiert und hab den Cmopiler drüber gejagt.
Und dann einen Fehler nach dem anderen sukzessive ausgemerzt.
Genau darum ist es auch für den Fragesteller wichtig, immer möglichst
komplierbaren (*) Code zu posten. Bei dir haben dem ersten Augenschein
nach nicht viele Dinge gefehlt. Wenn du allerdings noch ein paar Sachen
weggelassen hättest, hätte ich mir die Arbeit nicht gemacht :-)
(*) komplierbar im Sinne von: Ich kann das Teil nehmen und den Compiler
drüberjagen ohne zuerst 100-tausend Dinge, die mit dem eigentlichen
Problem nichts zu tun haben ergänzen zu müssen. Wenn ich ein paar
Funktionsprototypen ergänzen muss und aus dem Kontext sehen kann wie die
aussehen müssen, dann gehts schneller wenn ich die einfüge. Wenn ich
aber halbe Strukturen erraten muss, über Codeteile erst mal
Funktionsköpfe stülpen muss, nur um die ersten 15 Fehlermeldungen
wegzukriegen bis dann endlich die fragliche Fehlermeldung übrig bleibt,
dann pfeiff ich drauf :-)