2008-12-06 20 views

Antwort

19

Versuchen

(*foo)->member = 1; 

Sie müssen zuerst die * explizit verwenden. Ansonsten ist es ein Versuch, das Mitglied zu dereferenzieren.

+0

Ein zweifelhaftes Beispiel: Wenn die Funktion changeMember() in einer Klassenbibliothek erstellt wird und ich auf diese in meiner Konsolen-App zugreifen muss, wie soll es gemacht werden? : @ Jonathan Leffler – TechBrkTru

+0

@TechBrkTru: Da dies C ist, bin ich mir nicht sicher, was Sie mit einer "Klassenbibliothek" meinen. Wenn Sie jedoch "Bibliothek" meinen, dann stellen Sie einfach sicher, dass Sie einen Header mit den erforderlichen Funktionsdeklarationen im Code haben, der 'changeMember()' aufrufen muss, und verknüpfen Sie die ausführbare Datei mit der Bibliothek, die enthält die Funktion. Das ist alles völlig Routine. Wenn Sie etwas anderes meinen, sollten Sie wahrscheinlich Ihre eigene neue Frage stellen, damit Sie es richtig erklären können. –

+0

@JaredPar Warum brauchen wir einen Zeiger auf den Strukturzeiger, um das Element der Struktur ändern zu können (ist das kein Zeiger dafür?) – Bionix1441

1

vielleicht (* foo) -> member = 1 (wenn es dynamisch zugewiesen wird)

+0

Nein vielleicht - aber dynamische Zuordnung ist immateriell. –

7

Aufgrund Operatorpräzedenz, müssen Sie Klammern um diese zu setzen:

(*foo)->member = 1; 
3

Sie eine temporäre Variable zur Verbesserung der Lesbarkeit verwenden können. Zum Beispiel:

Ttype *temp = *foo; 
temp->member = 1; 

Wenn Sie die Kontrolle über diese und erlaubt haben C++, der bessere Weg zu verwenden ist Referenz zu verwenden. Zum Beispiel:

void changeMember(Ttype *&foo) { 
    foo->member = 1; 
}