Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem: CallByReference mit Zeigern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.07.2007, 10:30 Uhr
DataJockey



ich habe ein Problem mit Zeigern als Referenzparameter in Funktionen.
ich suche sowas wie nen out Parameter in Delphi fuer Objektreferenzen.

eine vorgegebene Funktion gibt eine Referenz auf CObject zurueck:

C++:
CObject* getObjectReference(int ind);


meine Funktion soll nun die Position eines passenden Objektes und das Objekt selbst zurueckgeben.

in dieser Art funktioniert es schon:

meine Funktion:

C++:
CObject* pickObject(int &pos)
{
    //init
    pos = -1;

    //..in Schleife suchen und wenn gefunden
    return getObjectReference(pos);

    //..wenn nicht gefunden
    return NULL;
}



der aufrufende Code sieht so aus:

C++:
int targetPos = -1;
CObject *myObject = pickObject(targetPos);
if (myObject)
{
    //code wenn gefunden
}
else
{  
    //code wenn nicht gefunden
}



soweit so gut. ich hatte bis jetzt nur eine Objektreferenz, welche ich zurueckgeben wollte.
aber was ist, wenn ich 2 habe. dafuer muss ich die Objektreferenzen als var-parameter in die parameterliste packen.

der Code sollte eigentlich auch so funktionieren:
meine Funktion:

C++:
int pickObject(CObject *aObject)
{
    //init
    aObject = NULL;
    
    //wenn gefunden
    aObject = getObjectReference(pos);
    return pos;

    //wenn nicht gefunden
    return -1;    
}



der aufrufende Code dann so:

C++:
CObject *myObject = NULL;
int targetPos = pickObject(myObject);
if (myObject)
{
    //code wenn gefunden
}
else
{  
    //code wenn nicht gefunden
}



edit: das Problem ist bei Version2, dass der aufrufende Code immer nen NULL pointer hat, weil die Referenz in der Funktion ja nicht als Referenz deklariert ist.

argh, ...sowas kann nen eingefleischten Delphi Progger echt fertig machen.

vlt ein bissl ausfuehrlich, aber besser so als zu wenig.
hoffe ihr hab ne idee.

danke, gruss dj
--
There are 10 kinds of people.
Those who understand binary code and those who don't.

Dieser Post wurde am 25.07.2007 um 10:44 Uhr von DataJockey editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.07.2007, 18:17 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
benutz dafür einen Doppelpointer:


C++:
int pickObject(CObject **aObject)
{
    if(aObject == NULL) // wenn der übergebene Pointer NULL ist
       return -1;
    //init
    *aObject = NULL; // den eigentlichen Pointer hinter dem Pointer initialisieren
    
    //wenn gefunden
    *aObject = getObjectReference(pos); // den eigentlichen Pointer hinter dem Pointer zuweisen

    return pos;

    //wenn nicht gefunden
    return -1;    
}

CObject *myObject = NULL;
int targetPos = pickObject(&myObject); // hier die Adresse deines Pointers übergeben.
if (myObject)
{
    //code wenn gefunden
}
else
{  
    //code wenn nicht gefunden
}


--
class God : public ChuckNorris { };

Dieser Post wurde am 25.07.2007 um 18:17 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.07.2007, 22:26 Uhr
DataJockey



super, das funzt. danke dir.

mit der doppelten Referenz habe ich auch rumprobiert. aber es hakte bei der weiteren Implementation.
--
There are 10 kinds of people.
Those who understand binary code and those who don't.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: