Hallo zusammen,
ich erhalte folgende Fehlermeldung beim Kompilieren von struct.c
Fehlermeldung:
1
struct.c: In function 'printAdresse':
2
struct.c:6:34: error: request for member 'ort' in something not a structure or union
Hier der C-Code
C-Code:
1
#include<stdio.h>
2
//Programm soll eigentlich zwei Threads starten, die etwas ausgeben, zur Einfachheit habe ich aber "einfache" Funktionen verwendet
3
//#include <pthread.h>
4
5
voidprintAdresse(void*a){
6
charort[]=(structadresse*)a.ort;
7
print("%s\n",ort);
8
}
9
10
intmain(void){
11
structadresse{
12
charstrasse[20];
13
charort[20]
14
unsignedlongtel;
15
};
16
17
structadressekrankenhaus={
18
"Musterstrasse 12",
19
"Musterort",
20
012345
21
};
22
23
printAdresse((void*)&krankenhaus);
24
return0;
25
}
Anmerkung: die erwarteten unspezifschen Datentypen sind bewusst gewählt,
da das ganze als Thread-Aufruf realisiert werden soll.
Das grundlegende was also nicht funktioniert ist die Übergabe eines
STRUCTS an pthread_create().
Danke für Hilfe
Hallo,
Danke für den Hinweis,
beim Verfassen des Posts habe ich wohl das Semikolon vergessen (arbeite
an einem anderen PC deshalb kein copy&paste des Sourcecodes).
Punkt 1
Was sollen die ganzen Casts in deinem Code?
Willst du dir mit Gewalt Probleme einhandeln?
Punkt 2
Um auf einen Strukturmember zuzugreifen, benutzt man die . Schreibweise
struct adresse adr;
adr.tel = 1234;
Aber: Du hast in der Funktion kein Objekt vom Typ struct adresse.
Du hast einen Pointer darauf!
Und wie immer muss man den Pointer dereferenzieren, wenn man an das
Objekt selber über den Pointer rankommen will
struct adresse * adr;
(*adr).tel = 1234;
Die Klammern rund um die Dereferenzierung sind notwendig, weil die
Operatoren Reihenfolge sonst falsch wäre
*adr.tel
würde vom Compiler gelesen als
adr nimm adr
adr.tel von diesem adr den tel member
*adr.tel und diesen Member derferenzierst du jetzt
Das ist aber Quatsch. Denn adr ist ja ein Pointer. Und ein Pointer hat
keine Member. Also muss es lauten
adr nimm adr
*adr dereferenzier den Pointer. Geh also
zum Objekt, auf welches adr zeigt
(*adr).tel und von diesem Objekt nimmst du den
tel member
Da aber diese Schreibweise mit den Klammern lästig zu schreiben ist,
gibt es in C eine Kurzform dafür
adr->tel
das macht genau dasselbe und sieht auch optisch schon mehr nach dem aus,
was da passiert
adr nimm adr
adr-> verfolge den Pointer bis zum Objekt, auf
welches adr zeigt
adr->tel und von diesem Objekt nimmst du den tel
Member
> struct.c:6:34: error: dereferencing pointer to incomplete type
3
>
Lies dein Programm von oben nach unten. Lies es nur ein einziges mal.
Wo wird das erste mal ein 'struct adresse' verwendet und wo wird
definiert, was das überhaupt ist.
Wenn die Verwendung vor der Definition erfolgt, hast du ein Problem.
Denn wie gesagt: Der Compiler liest den Text von oben nach unten. Und er
tut das nur ein einziges mal. Und verwenden kannst du nur Dinge, die du
vorher definiert hast.
Was der Compiler nicht tut: Sich die Einzelteile aus dem Programmtext
kreuz und quer zusammensuchen.
Das ist das eine Problem. Das andere ist, daß der Typ lokal definiert
wurde. Genau wie Variablendefinitionen haben auch Typdefinitionen einen
Gültigkeitsbereich. Ein Typ, der nur lokal in einer Funktion definiert
ist, ist auch nur in der Funktion verfügbar.
Karl Heinz Buchegger schrieb:> Punkt 1>> Was sollen die ganzen Casts in deinem Code?> Willst du dir mit Gewalt Probleme einhandeln?
Hat er doch geschrieben:
Daniel schrieb:> //Programm soll eigentlich zwei Threads starten, die etwas ausgeben, zur> Einfachheit habe ich aber "einfache" Funktionen verwendet
Den Thread-Einstiegsfunktionen kann man ja in der Regel bei
Thread-Erstellung irgendwas übergebn, aber halt nur per Zeiger auf void.
Karl Heinz Buchegger schrieb:> [...]
Sehr geehrter Herr Buchegger!
Bitte beachten Sie, daß Sie nur noch elf Postings übrig haben, bevor der
Postingcounter überläuft und dieses Forum explodiert.
Wählen Sie daher die Themen, zu denen Sie etwas beizutragen wünschen,
sorgfältig aus und schreiben Sie dann weiterhin exzellente Beiträge.
Mit tiefem Bedauern über Ihr schweres Einzelschicksal verbleibe ich,
Ihr Florian
;-)
Wenigstens schreibt zu mind. 99% sinnvolle Sachen, was man nicht von
jedem Florian behaupten kann, ebensowenig wie vom durchschnittlichen
Gast.
PS: ich finde manchmal auch, daß er zuviel schreibt - aber nicht, weil
es mich stören würde, sondern weil er manchmal den Leuten noch etwas
hinterherträgt, wo ich schon Hopfen und Malz verloren sehe.
Klaus Wachtler schrieb:> PS: ich finde manchmal auch, daß er zuviel schreibt - aber nicht, weil> es mich stören würde, sondern weil er manchmal den Leuten noch etwas> hinterherträgt, wo ich schon Hopfen und Malz verloren sehe.
Jeder Leser kann daraus lernen kann, selbst wenn's gerade der TE nicht
ist, und das dürfte auch sein Motiv sein.
Ja (und ich finde es auch wirklich ehrenwert!), aber ein Großteil davon
steht in jedem besseren C-Buch und könnte mit wenig Mühe von jedem auch
dort gelesen werden (oder hier im Forum, weil sich das Meiste ja auch
hier schon mehrfach wiederholt).
Dann tut es mir schon manchmal weh, wenn man für die Suchfaulen alles
zum Hundertsten Mal mit viel Aufewand erklärt. Schließlich steckt da ja
acuh einige Zeit drin.
Mein Unbehagen geht also nicht gegen nicht gegen KHB, sondern gegen die
grassierende Dumpfheit vieler anderer.
Der kleine Florian,
hat selbst wahrscheinlich schon dutzend mal von Karl-Heinz profitiert
und weil es ihm peinlich ist selbst nichts beitragen zu können versucht
er sich mal als feiger Heckenschütze.
Na ja wenns für mehr nicht reicht...
Udo Schmitt schrieb:> Der kleine Florian,
Hat einen dicken Smiley hinter sein Posting gesetzt. Genügt der denn
nicht?
Wer sich Karl-Heinz' Postingzahl mal ansieht, weiß dann auch, was
er da scherzhaft andeuten will: falls die Postingzahl dummerweise
ein int16_t ist, dann wird sie in wenigen Postings negativ werden. :)
Jörg Wunsch schrieb:> Hat einen dicken Smiley hinter sein Posting gesetzt. Genügt der denn> nicht?
Hallo Jörg,
Sorry, aber ich habe das trotz Smiley anders verstanden, speziell der
letzte Satz. Zumal Florian vorher nicht in Erscheinung getreten ist und
anonym gepostet hat. Im Zweifel lösche einfach meinen Beitrag, trägt eh
nichts zur Diskussion bei.
Gruß, Udo
Klaus Wachtler schrieb:> Dann tut es mir schon manchmal weh, wenn man für die Suchfaulen alles> zum Hundertsten Mal mit viel Aufewand erklärt. Schließlich steckt da ja> acuh einige Zeit drin.>> Mein Unbehagen geht also nicht gegen nicht gegen KHB, sondern gegen die> grassierende Dumpfheit vieler anderer.
Wenn bekannt ist, wo 'ne Antwort kommt, dann ist's einfacher zu fragen
als zu suchen. Was sich schwierig gestaltet ist oft das "Richtige" im
Sinne von "korrekt" zu finden.
Die Natur eines Forums ist, dass jeder beiträgt. Aus der Masse der
falschen Beiträge dann die Richtigen zu filtern, müsste man bereits
wissen was richtig ist. Ein Henne-Ei Paradoxon.
Wenn Karl Heinz in dieser Ausführlichkeit schreibt, obwohl er das
Geschäft ja nun lang genug kennt, dann kannst Du davon ausgehen, dass
dies sein Bedürfnis und kein Versehen ist.
MWS schrieb:> Wenn Karl Heinz in dieser Ausführlichkeit schreibt, obwohl er das> Geschäft ja nun lang genug kennt, dann kannst Du davon ausgehen, dass> dies sein Bedürfnis und kein Versehen ist.
Die Sache ist oft auch die.
Ich hab mir im Lauf der Jahre ein paar Gedankenmodelle zurecht gelegt,
die ich so in keiner Literatur gefunden habe. Durch Versuch und Irrtum
hab ich rausgefunden, dass diese Modelle auch anderen helfen gewisse
Sachverhalte zu verstehen (zb meine 'berühmten' Zeichnungen sobald es um
Pointer und dynamische Strukturen geht). Oft sind es auch einfach nur
'Faustregeln' die überraschend gut funktionieren.
Denke ich so an meine Anfänge zurück, dann war ich oft froh, wenn ich
denselben Sachverhalt von 2.ter oder 3.ter Seite nochmal in seinen
eigenen Worten gehört habe. Hand aufs Herz, wer war noch nie in der
Situation, dass er sich in der Literatur ein Kapitel durchgelesen hat
und sich dann als aller erstes gefragt hat: Hä, was will mir der Autor
sagen?
Und dann liest du dasselbe bei einem anderen Autor und plötzlich fangen
die Einzelteile an, wie Puzzlestücke ineinanderzufallen. Geht man dann
zurück zum ersten Autor, stellt man plötzlich fest: Ja klar, jetzt macht
alles Sinn; jetzt versteh ich plötzlich wovon der redet und warum er
manchmal auf einem Detail rumreitet, das ich vorher nicht verstanden
habe. Es war nur ein klitzekleines Puzzelstück, eine Formulierung, die
den Stein ins Rollen gebracht hat.
> falls die Postingzahl dummerweise ein int16_t ist, dann wird> sie in wenigen Postings negativ werden. :)
Ooops. Schon so viele :-)
Karl Heinz Buchegger schrieb:> Denke ich so an meine Anfänge zurück, dann war ich oft froh, wenn ich> denselben Sachverhalt von 2.ter oder 3.ter Seite nochmal in seinen> eigenen Worten gehört habe. Hand aufs Herz, wer war noch nie in der> Situation, dass er sich in der Literatur ein Kapitel durchgelesen hat> und sich dann als aller erstes gefragt hat: Hä, was will mir der Autor> sagen?> Und dann liest du dasselbe bei einem anderen Autor und plötzlich fangen> die Einzelteile an, wie Puzzlestücke ineinanderzufallen. Geht man dann> zurück zum ersten Autor, stellt man plötzlich fest: Ja klar, jetzt macht> alles Sinn; jetzt versteh ich plötzlich wovon der redet und warum er> manchmal auf einem Detail rumreitet, das ich vorher nicht verstanden> habe. Es war nur ein klitzekleines Puzzelstück, eine Formulierung, die> den Stein ins Rollen gebracht hat.
Jepp.
Man merkt dann eigentlich auch ob der Autor das Thema verstanden
oder nur "übernommen" hat. Es ist nicht einfach, einen Sachverhalt
anschaulich und gleichzeitig sachlich korrekt darzustellen.
Da gibt es Schwarten ... ;)
Jörg Wunsch schrieb:> Udo Schmitt schrieb:>> Der kleine Florian,>> Hat einen dicken Smiley hinter sein Posting gesetzt. Genügt der denn> nicht?>> Wer sich Karl-Heinz' Postingzahl mal ansieht, weiß dann auch, was> er da scherzhaft andeuten will: falls die Postingzahl dummerweise> ein int16_t ist, dann wird sie in wenigen Postings negativ werden. :)
So wars gemeint.
Und falls es nicht klar rüberkam: ich habe allergrößten Respekt vor
Karl-Heinz.
Leider sieht man hier aber auch wieder schön das Beißverhalten der
Alteingesessenen. Und ebenso sieht man, daß wir bösen Pseudonymnutzer
eher nicht diejenigen sind, die den Umgangston im Forum vermiesen.