Hallo, ich habe folgenden typedef: typedef struct button_info { uint8_t pressed; uint8_t pressed_long; uint8_t active; uint8_t pin; } but_info_t; und eine Funktion die folgendermaßen aussieht: but_info_t *but_check(uint8_t nmb) { return &button[nmb]; } nun möchte ich in meiner main folgenden Einzeilerhaben: int main(void){ but_info_t *bsp; bsp = but_check(0); if (bsp->pressed == 1){ ..... ..... ..... } } wie genau muß der Syntax in der main dazu sein? Irgendwie finde ich für dieses spezielle Beispiel und durch try and error bin ich nicht weitergekommen. Das ich die Adresse zurückgeben möchte anstatt die Variable an sich habe ich mal so gelernt. Gruß Andreas
Was genau geht denn nicht? Abgesehen davon, daß du dir die Funktion komplett sparen kannst, und direkt in main
1 | bsp = &button[0]; |
schreiben könntest, ist das soweit alles richtig. Vorausgesetzt natürlich, irgendwo steht noch sowas wie
1 | but_info_t button[4711]; |
Oliver
> assignment makes pointer from integer without a cast
Sieht so aus, also ob der Compiler zu diesem Zeitpunkt die Funktion
but_check nicht kennt.
Jetzt habe ich deinen zweiten Thread auch gesehen. Da steht aber ein anderer Code als hier. Also: Zeig das ganze Programm. Sonst wird das nichts. Oliver
Vielmehr gibt es da leider nicht zu zeigen Aber hier nochmal alle betroffenen Zeilen: das typedef für but_info_t sieht so aus: typedef struct button_info { uint8_t pressed; uint8_t pressed_long; uint8_t active; uint8_t pin; } but_info_t; In der Datei button.c findet man u.a. diese zeilen: but_info_t button[buttoncounter]; //buttoncounter ist hier 3 das Array wird in einer anderen Funktion gefüllt und das funktioniert auch. dann rufe ich aus der main diese Funktion auf: but_info_t *but_check(uint8_t nmb) { return &button[nmb]; } und zwar mit dieser Zeile: button = but_check(2); folgende Fehlermeldung kommt: assignment makes pointer from integer without a cast Das ganze wird für einen ARM (AT91) mit gcc kompiliert. Wenn ich mir die zum Beispiel in der main den Inhalt der variabel button anschaue, zum Beispiel button.pin. Dann stimmen die Wert, allerdings weiß ich nicht was ich machen muß um diese Warnung weg zu bekommen. Hoffe das reicht euch an Informationen
Andreas wrote:
> Hoffe das reicht euch an Informationen
Nein. Weil das Problem wahrscheinlich daran liegt, dass in main() die
aufgerufene Funktion nicht bekannt ist und daher alter C Tradition
folgend als "int but_check();" interpretiert wird.
jetzt verstehe ich! Das kann wirklich sein. Ok, da ich in der main kein "extern funktionsname ();" haben möchte wollte ich eben die Funktion but_info_t *but_check(uint8_t nmb) in der lib_button.h hinzufügen. Dort steht auch mein typedef für but_info_t. Das Einfügen folgender Zeile but_info_t *but_check(uint8_t nmb); klappte aber nicht. Dei Fehlermeldung lautet: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token so langsam habeich das Gefühl ich stehe heute auf dem Schlauch. Kann mir jemand helfen? gruß Andreas
Andreas wrote: > error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token Jetzt fehlt ihm die Definition von buf_info_t. > so langsam habeich das Gefühl ich stehe heute auf dem Schlauch. > Kann mir jemand helfen? Ein C Kurs könnte helfen. Ein entsprechendes Buch auch.
Oh mann... das wars. Danke.Wegen dem Buch....ist ja bald Weihnachten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.