Frage

ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA* pa,ClassB* pb)
{
pa = new ClassA;
pb = new ClassB;
}

, was den Wert pa sein wird, pb nach Ausführen der Funktion

EDIT wie passieren als Zeiger die Rückkehr ist, wenn pa, pb NULL

War es hilfreich?

Lösung

Wie in anderen Antworten darauf hingewiesen - beide werden nach wie vor nach dem Aufruf NULL sein. Allerdings gibt es zwei mögliche Lösungen für dieses Problem:

1) Referenzen

void assignObject(ClassA*& pa, ClassB*& pb)
{
    pa = new ClassA;
    pb = new ClassB;
}

ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(pa, pb); // both will be assigned as expected.

2) Zeiger

void assignObject(ClassA** pa, ClassB** pb)
{
    assert(pa != NULL); assert(pb != NULL);
    *pa = new ClassA;
    *pb = new ClassB;
}
ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(&pa, &pb); // both will be assigned as expected.

Die meisten Programmierer würde wahrscheinlich Referenzen wählen, weil dann müssen sie nichts behaupten (Referenzen kann niemals NULL sein).

Andere Tipps

Sie werden NULL, da man sie von Wert sind vorbei. Wenn Sie es unter Bezugnahme auf geben wollen, würden Sie dies tun:

ClassA* pa = NULL;
ClassA* pb = NULL;
assignObject(ClassA*& pa, ClassB*& pb)
{
    pa = new ClassA;
    pb = new ClassB;
}

Beachten Sie, ich bin nicht sicher, was Sie versuchen, mit den globalen Variablen zu erreichen. Sie sind nie in diesem Beispiel verwendet, da die lokalen Variablen (Funktionsparameter), um sie zu verstecken.

Ich glaube, Sie müssen auch einen Rückgabewert Typ für Ihre Funktion, um zu erklären für sie gültig C sein ++.

ClassA* pa = NULL;
ClassA* pb = NULL;

void assignObject(ClassA* &pa,ClassB* &pb)
{
    pa = new ClassA;
    pb = new ClassB;
}

Alternativ:

ClassA* pa = NULL;
ClassA* pb = NULL;

void assignObject(ClassA** pa,ClassB** pb)
{
    *pa = new ClassA;
    *pb = new ClassB;
}

NULL, weil Sie die Zeiger in vorbei sind von Wert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top