2013-04-01 44 views
0

這是我的函數:通過引用傳遞指針正確的方式來做到這一點?

void CreateRenderTarget(HWND, ID2D1HwndRenderTarget*); 

,有是如何工作的:

void D2DRes::CreateRenderTarget(HWND hwnd, ID2D1HwndRenderTarget* pRT) 
{ 
    RECT rc; 
    GetClientRect(hwnd,&rc); 

    pFactory->CreateHwndRenderTarget(
      D2D1::RenderTargetProperties(), 
      D2D1::HwndRenderTargetProperties(
       hwnd, 
       D2D1::SizeU(
        rc.right - rc.left, 
        rc.bottom - rc.top)), 
       &pRT); 
} 

它被稱爲是這樣的:

pD2DRes->CreateRenderTarget(map.GetHWnd(),map.GetpRT()); 

一旦從CreateRenderTarget返回(),地圖。 pRT是NULL。怎麼會?

編輯:還有就是我GetpRT()函數:

ID2D1HwndRenderTarget* MapEditor::GetpRT() 
{ 
    return pRT; 
} 
+0

'GetpRT'的定義是什麼? –

+0

ID2D1HwndRenderTarget * MapEditor :: GetpRT() { \t return pRT; } 在我的地圖對象中生成一個私人ID2D1HwndRenderTarget *。 –

+1

另一個! :P –

回答

2

第一個問題:

CreateRenderTarget()一旦回國,map.pRTNULL。怎麼會?

因爲您未通過引用傳遞指針。爲了通過引用傳遞它的CreateRenderTarget()簽名應該是:

void CreateRenderTarget(HWND, ID2D1HwndRenderTarget*&); 
//            ^

除非你這樣做,你的CreateRenderTarget()將作爲參數傳遞的指針的副本合作,並改變其值不會影響原始指針。

問題二:

你寫:

[...]還有就是我GetpRT()功能:

ID2D1HwndRenderTarget* MapEditor::GetpRT() 
{ 
    return pRT; 
} 

通知書的,GetpRT也應該返回參考到內部pRT指針,否則上述更改將不會產生效果(您將通過引用原始pRT副本傳遞。

因此,應該相應地修改其簽名:

ID2D1HwndRenderTarget*& MapEditor::GetpRT() 
//     ^
{ 
    return pRT; 
} 
+0

啊!我明白了,謝謝! –

+0

@MickaelBergeronNéron:不客氣,好運與您的項目:) –

+0

ID2D1HwndRenderTarget * MapEditor :: GetRefpRT(){ \t回&pRT; } 有什麼不對呢? –

0

這是一個很奇怪的代碼。您按價值傳遞了所有內容,並期望修改函數中的值。

如果您打算修改傳遞給函數的指針,其原型應該如下:

無效CreateRenderTarget(HWND,ID2D1HwndRenderTarget * & PRT);

相關問題