考虑这种方法:
result MyClass::getBMPText(Osp::Graphics::Bitmap *pBMP, Osp::Base::String &outtext, const int index) const {
//Do stuff
AppLog("3 Returning %S, 0x%X", outtext.GetPointer(), (int)pBMP);
return E_SUCCESS;
}
我称之为:
String itemstr;
Bitmap *pBMP = null;
for (int i = 0; i < ItemCount(); ++i) {
getBMPText(pBMP, itemstr, i);
AppLog("got %d : %S 0x%X", i, itemstr.GetPointer(), (int)pBMP);
}
现在看一下日志:
5537.642,INFO,P35,T00,A190,FileMan :: getBMPText(401)&gt; 3返回图像,0xB96E2140 5537.643,INFO,P35,T00,A190,FileMan :: Update1p2List(130)&gt;得0:图像0x0
要重复我的问题/观察:该函数将其返回值记录为有意义且只需设置它即可。然而,客户端返回它发送的相同空引用。
答案 0 :(得分:3)
您按值传递指针,因此原始指针永远不会更改。将函数签名更改为Osp::Graphics::Bitmap * & pBMP
以通过引用传递指针。
答案 1 :(得分:1)
如果您想更改原始指针,则必须将其作为指针或参考传递。例如。函数getBMPTest
将声明为
result MyClass::getBMPText(Osp::Graphics::Bitmap *& pBMP, Osp::Base::String &outtext, const int index) const
并调用
getBMPText(pBMP, itemstr, i);
如果你更喜欢指针,你可以这样做:
result MyClass::getBMPText(Osp::Graphics::Bitmap ** pBMP, Osp::Base::String &outtext, const int index) const
getBMPTest(&pBMP, itemStr, i);
答案 2 :(得分:0)
这是因为你没有在函数内设置*pBMP
(你设置pBMP
,指针类型)。更改指针本身不会影响其目标。
同样地,对于index
,你是通过值传递的,所以没有任何结果。