2016-10-05 2 views
1

zurückgegeben wird, nicht übergeben, warum brauche ich Zwischenvariable, um meinen Rückgabezeiger als Verweis zu übergeben, statt nur die Funktion zu verwenden, die den Zeiger zurückgibt?kann einen Zeiger, der von einer Funktion

nicht kompiliert Dies verbietet nicht

int main() 
{ 
    testfunc(getpointer()); 
    return 0; 
} 

error: C2664: 'void testfunc(int *&)': cannot convert argument 1 from 'int *' to 'int *&'

und dies stellt

int main() 
{ 
    int *i = getpointer(); 
    testfunc(i); 
    return 0; 
} 

meine beiden Funktionen

void testfunc(int *& i) // I have to use this interface 
{ 
    cout << i[0] <<endl; 
} 

int* getpointer() 
{ 
    int * arr1 = new int[1]; 
    arr1[0]=10; 
    return arr1; 
} 
+2

Weil es ein temporäres Objekt ist. –

+0

richtig! aber warum kann dieses temporäre Objekt nicht an testfunc übergeben werden? es hat immer noch eine Adresse und es kann zugegriffen werden? Recht ? oder vermisse ich etwas? – HazemGomaa

+0

@DavidSchwartz wenn diese Adresse dann zerstört wird? Ich ging davon aus, dass zumindest die Adresse an testfunc übergeben wird. Warum nicht? – HazemGomaa

Antwort

5

Die Sprache C++ eine nicht konstante Referenz Bindung an eine temporäre. In diesem Fall besteht die einfache Lösung darin, testfunc eine konstante Referenz auf eine int* zu nehmen.

+0

Ich kann das nicht kontrollieren .. testfunc ist in einer dritten Partei lib – HazemGomaa

+1

@ HG Dann müssen Sie einige hässliche hack verwenden mit einer Kopie des Temporären oder einer Besetzung oder etwas Hässlichem. Aber verstehe, dass 'testfunc' defekt ist. –

+0

richtig! ... testfunc (int * const & i) hat gut funktioniert .. schade, ich kann diese testfunc nicht in meinem echten Code ändern, aber zumindest sehe ich das Problem jetzt! – HazemGomaa

Verwandte Themen