2016-10-05 10 views
1

なぜ、そのポインタを返す関数を使用するのではなく、参照で返すポインタを渡す中間変数が必要ですか?関数から返されたポインタを参照渡しすることはできません

これは

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

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

をコンパイルしていないと、これはコンパイル

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

私の二つの機能

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

一時的なオブジェクトだからです。 –

+0

右なぜこの一時的なオブジェクトがtestfuncに渡せないのでしょうか?それはまだアドレスを持っており、アクセスすることができますか?右 ?または私は何かが恋しいですか? – HazemGomaa

+0

@DavidSchwartzこのアドレスが破壊されたら?私は、少なくともアドレスがtestfuncに渡されると仮定していました。なぜそうではありませんか? – HazemGomaa

答えて

5

C++言語の禁止への非const参照を結合一時的な。この場合、簡単な修正はtestfuncint*へのconst参照にすることです。

+0

私はそれを制御できません.. testfuncはサードパーティのlibにあります – HazemGomaa

+1

@HG次に、一時的なものやキャストのもの、それと醜いものなどがあります。しかし、 'testfunc'が壊れていることを理解してください。 –

+0

そう! ... testfunc(int * const&i)は正常に動作しました。残念ですが、私は実際のコードでこのtestfuncを変更することはできませんが、少なくとも私は今問題を見ています! – HazemGomaa

関連する問題