Forum: Compiler & IDEs Problem bei der Übergabe eines structs


von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

Guten Morgen,
ich hab mal wieder ein Problem mit einem Programmfragment. Ich möchte 
einen Pointer auf eine Struct übergeben und diese dann entsprechend 
nutzen.
1
int main(void){
2
struct soap soap;
3
soapInit(&soap);
4
soap_begin(&soap);
5
return 0;
6
}
7
8
int soapInit(struct soap *mysoap){
9
soap_init(mysoap);
10
//struct soap mysoap;
11
mysoap.fsend=customizedSend;
12
mysoap.frecv=customizedRcv;
13
return SOAP_OK;
14
}
Bei dem soap struct handelt es sich um die Soap Runtime aus der gsoap 
API, was aber mit dem Problem nichts zu tun hat. Die Fkt. fsend und 
frecv sind Teile dieser Struktur. Wenn ich die auskommentierte Zeile 
benutze funktioniert alles wunderbar, aber wenn ich so wie hier den 
Zeiger benutzen möchte, sagt  mir der gcc, dass ich auf einen member 
eines Typs zuzugreifen versuche, der weder struct noch union ist. Was 
mach ich da falsch? Kann man structs nicht so behandeln?
Danke schon mal für eure Hilfe!!

von Walter (Gast)


Lesenswert?

bei einem Zeiger greift man mit -> auf die Elemente des structs zu

von Karl H. (kbuchegg)


Lesenswert?

Icke Muster wrote:
> benutze funktioniert alles wunderbar, aber wenn ich so wie hier den
> Zeiger benutzen möchte, sagt  mir der gcc, dass ich auf einen member
> eines Typs zuzugreifen versuche, der weder struct noch union ist.

und recht hat er damit.

mysoap ist weder eine union noch eine struct.
mysoap ist ein Pointer.

Und ein Pointer hat nun mal keine Member. Er ist einfach nur
ein Pointer, so wie ein int einfach nur ein int ist.

Aber das, worauf der Pointer zeigt, ist ein struct. Und die hat
die entsprechenden Member. Also muss man den Pointer dereferenzieren,
damit man an die struct kommt

   (*mysoap).fsend = ...

Da diese Schreibweise mit Klammern und * aber umständlich zu
tippen ist, und diese Operation relativ häufig vorkommt, gibt
es in C eine alternative Syntax

   mysoap->fsend = ....

> Was
> mach ich da falsch?

Du liest kein C-Buch. Da würde das alles drinnenstehen.

von Icke M. (Firma: my-solution) (hendi)


Lesenswert?

@Walter: Danke für deine schnelle Antwort
@Karl Heinz: Danke wieder einmal für deine ausführliche Antwort. Den 
Vorwurf mit dem Buch muss ich zumindest teilweise zurückweisen. Ich habe 
im Kernighan/Richie danach gesucht und bin nach deinem Hinweis mit 
dem"->" jetzt auch fündig geworden. Also hab ich scheinbar falsch 
nachgeschaut, bin nach dem Post ins Bett, mein Blick war schon etwas 
schwammig... .

Also nochmals danke und sorry für den Boardoverhead!

P.S.: Es funktioniert jetzt natürlich, so wie ihr es vorgeschlagen habt!

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.