[C++] Struktur Zeiger als Parameter
Hallo!
Ich bin gerade auf ein Problem gestoßen:
Ich habe eine Funktion geschrieben, die als Parameter einen Struktur-Zeiger empfängt. Aber bevor weiter unverständlich rumschwafle zeig ich am besten mal den code-ausschnitt:
struct meinestr
{
char feld[30];
};
int meinefunktion(meinestr *mstr)
{
*mstr.feld[2] = 'd';
return 0;
}
Und die entsprechende Fehlermeldung:
Zitat:
error C2228: Links von ".feld" muss sich eine Klasse/Struktur/Union befinden.
Compiler: VC++
Plattform: Windoof
Typ: Konsolenanwendung...
Also an sich sollte sowas ja funktionieren, *mstr ist ja eine Struktur (natürlich vorrausgesetzt es wird eine Struktur Referenz übergeben.
Wäre wirklich dankbar für irgendwelche Ansätze!
mfg
TByte
Antwort schreiben
Antwort 1 von Supermax vom 11.12.2021, 19:42 Options
Meine Kenntnisse sind zwar schon etwas eingerostet, aber m.W. müßte es statt
*mstr.feld[2] = 'd';
mstr->feld[2] = 'd'
heißen
Antwort 2 von Elefunty vom 11.12.2021, 20:40 Options
jo,
mit mstr->feld[2] sollte das gehen.
soweit ich weiß auch (*mstr).feld[2]
da sollte man sich vllt noch mal das kapitel zeiger in einem tut anschauen. normalweise ist das erklärt.
Ele
Antwort 3 von TByte vom 12.12.2021, 21:49 Options
Hallo
Das Problem ist ja, wenn ich das gleiche mit int mache, was ich in einer anderen Dunktion gemacht, dann funktioniert es.
Ich guck noch mal was Fehlermeldung bei Supermax Vorschlag raus kommt, sobal ich wieder an meinen code komme :)
Auf jeden fall bisher danke,
mfg
TByte
Antwort 4 von JanniV vom 20.01.2022, 13:19 Options
Weiß nicht, ob Du Dein Problem jetzt selbst gelöst hast, aber ohne es jetzt in meinem Compiler auszuprobieren müsste es meines Erachtens nach lauten:
struct meinestr
{
char feld[30];
};
int meinefunktion(struct meinestr *mstr)
{
mstr->feld[2] = 'd';
return 0;
}
Das Ansprechen der Strukturmember haben meine Vorredner schon richtigerweise korrigiert. Aber Du müsstest den Parametertyp noch explizit deklarieren. (struct einsetzen)
Oder Du verwendest ein
typedef. Dann kannst Du das Schlüsselwort
struct weglassen.
typedef struct tagMeinestr
{
char feld[30];
} meinestr;
int meinefunktion(meinestr *mstr)
{
mstr->feld[2] = 'd';
return 0;
}