parameterübergabe
-
Hi leute,
ich habe folgendes Problem:
ich habe eine Routine und erzeuge dort ein:BODY* filebody;
dann rufe ich eine Funktion auf und übergebe diesen Zeiger.
importfile(filebody);
in dieser importfile soll dieser zeiger jetzt auf ein bestimmten wert zeigen.
Und ich möchte danach in meine Routine mit diesem Zeiger arbeiten können,
wie mache ich das?
Kann mir da jemand helfen?
-
Wenn Du Dich mal so ausdrückst das man weiß was Du meinst kann man es versuchen
-
C++ arbeitet mit Call-by-Value, d.h. es werden grundsätzlich Kopien der Argumente übergeben. Es gibt 2 Auswege, einmal Pointer und einmal Referenzen.
// 1. Übergabe per Pointer void importfile(BODY** b) { *b = ... } // 2. Übergabe per Referenz void importfile(BODY*& b) { b = ... }
-
Haha knuddi du bist cool...
also ich versuchs nochmal:
In mein Programm rufe ich ein Funktion F1 auf und übergebe diese Funktion ein Parameter. IN Funktion F1 soll diese parameter, was ein zeiger ist, auf einen bestimmten wert zeigen
so in etwa:bool F1 ( BODY* fileBody) { BODY* fBody; . . . fileBody = fBody; }
So nach dem ich diese Funktion aufgerufen habe, möchte ich auf den Selben SPeichplatz zugreifen, auf den
fBody zeigt und eigentlich müsste ja fileBody auch drauf zeigen oder?
-
Alexo schrieb:
bool F1 ( BODY* fileBody) { BODY* fBody; . . . fileBody = fBody; }
So nach dem ich diese Funktion aufgerufen habe, möchte ich auf den Selben SPeichplatz zugreifen, auf den
fBody zeigt und eigentlich müsste ja fileBody auch drauf zeigen oder?In der Tat, das tut er. nur fBody wird nach dem verlassen der Funktion zerstört,
da dies sein Scope ist. Das heisst, du zeigst auf etwas was nur existiert
solange die Funktion aufgerufen wird...Devil
-
Alexo schrieb:
So nach dem ich diese Funktion aufgerufen habe, möchte ich auf den Selben SPeichplatz zugreifen, auf den
fBody zeigt und eigentlich müsste ja fileBody auch drauf zeigen oder?EDIT: Zu spät.
Du musst wenn du sowas machen willst fileBody den Inhalt übergeben von fBody.Code-Hacker
-
ja Devil, wie mache ich das?
Bashar, deine vorschläge haben irgendwie nich funktioniert.
-
Alexo schrieb:
ja Devil, wie mache ich das?
Bashar, deine vorschläge haben irgendwie nich funktioniert.Wenn du die Adresse haben willst, lass sie dir in der Funktion ausgeben. Du hast du solange auf die Adresse zugriff wie auch die Funktion läuft, danach wird fBody zerstört und somit ist auch die Adresse weg. Außerdem wird sich die Adresse von fBody bei jedem Funktionsaufruf verändern (mit extrem hoher Wahrscheinlichkeit, selbst wenn du 2 hintereinander machst).
Auf die Adresse kannst du nur zugreifen solange die Prozedur läuft bzw. solange deine Zeigervariable existiert, ansonsten gar nicht.Code-Hacker
-
ok, danke devil
und wie kann ich den inhalt kopieren?
-
Alexo schrieb:
ok, danke devil
und wie kann ich den inhalt kopieren?Wieso arbeitest du nicht gleich mit dem übergebenen Zeiger ?
Ansonsten könntest du noch dereferenzieren :
*pointer = *anderer_pointer;
mit * greifst du auf den Inhalt zu.Allerding weiss ich nicht, was BODY ist, evtl. gibts da Probleme.
Devil
-
Alexo schrieb:
ok, danke devil
und wie kann ich den inhalt kopieren?Ich bin nicht devil.
Code-Hacker
-
Bashar schrieb:
C++ arbeitet mit Call-by-Value, d.h. es werden grundsätzlich Kopien der Argumente übergeben. Es gibt 2 Auswege, einmal Pointer und einmal Referenzen.
// 1. Übergabe per Pointer void importfile(BODY** b) { *b = ... } // 2. Übergabe per Referenz void importfile(BODY*& b) { b = ... }
Die Antwort wurde doch bereits gegeben. Nur noch mal Zitiert falls dies (wegen meinem Unverständnis für die Frage, habs halt nich kapiert O
untergegangen ist.
-
Wenn es trotz meiner Antwort nicht funktioniert, muss der Fehler in der Funktion importfile liegen. Poste die doch mal, wenn sie nicht zu lang ist.
-
Bashar die funktion hat hat vorher funktioniert, aber das parameter was ich übergeben möchte, dass ist ein default-parameter, liegt es vielleicht daran?
den der compiler meckert nur deswegen.
-
Entweder stell ich mich besonders blöd an (mag sein, Bashar wusste auch vorhin die Antwort) oder ich benutze meine Kristallkugel nicht richtig.
Ums Umgangssprachlich auszudrücken:
häää ?
Eventuell hilft:
void foo(int para1,int para,....,BODY ** fBody = NULL)
weiter. Was mault der Compiler denn ?
P.s.: Magst Dich nich registrieren ?
Hat nur Vorteile
-
schau knuddi, ich hab auf dich gehört und mich angemeldet.
Knuddi sag mir mal jetzt
wie mach die funktionaufruf?ich habe ja
BODY* body = NULL;und rufe die
funktion so auf:importfile(par1,par2,par3, body);
und kriege fehler meldung dafür:error C2664: 'importFile' : cannot convert parameter 4 from 'class BODY *' to 'class BODY ** '
-
Ah thx für die Anmeldung
So schaut das besser aus
thx für die Fehlermeldung, nu weiß ich auch was Du meinst.
Versuchs mal so:
importfile(par1,par2,par3, &body);Du brauchst ja nun den Zeiger auf den "Zeiger"
p.s.: Du heisst nicht zufällig Hoffmann o.ä. ? Knuddi werd ich extrem selten genannt ;o)
-
Die Adresse des Zeigers übergeben, nicht den Zeiger selbst: &body
Devil
-
Hey Danke leute
Warum den nicht gleich so??
Nein ich heisse net Hoffman, knuddi. Ich nehm einfach für alles ne abkürzung, gewohnheit.
-
[ot]Ja die meisten kürzen es ab mit "Knuddl"
[/ot]