2.3k Aufrufe
Gefragt in Anwendungen(Java,C++...) von Experte (1.1k Punkte)
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:

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

4 Antworten

0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Meine Kenntnisse sind zwar schon etwas eingerostet, aber m.W. müßte es statt

*mstr.feld[2] = 'd';

mstr->feld[2] = 'd'

heißen
0 Punkte
Beantwortet von Experte (3.2k Punkte)
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
0 Punkte
Beantwortet von Experte (1.1k Punkte)
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
0 Punkte
Beantwortet von janniv Einsteiger_in (19 Punkte)
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;
}
...