Что может вызвать `MyType * pType` для перехода от допустимого параметра до возврата к нулю при возврате? - PullRequest
2 голосов
/ 04 февраля 2012

Рассмотрим этот метод:

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)> 3 Возвращаемые изображения, 0xB96E2140 5537.643, INFO, P35, T00, A190, FileMan :: Update1p2List (130)> получил 0: изображения 0x0

Чтобы повторить мой вопрос / наблюдение: функция записывает возвращаемое значение как осмысленное и релевантное, просто установив его.Однако клиент возвращает ту же нулевую ссылку, которую он отправил.

Ответы [ 3 ]

3 голосов
/ 04 февраля 2012

Вы передаете указатель по значению, поэтому исходный указатель никогда не изменяется.Измените сигнатуру функции на Osp::Graphics::Bitmap * & pBMP, чтобы передать указатель по ссылке.

1 голос
/ 04 февраля 2012

Если вы хотите изменить исходный указатель, вам нужно будет передать его как указатель или как ссылку. Например. функция 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);
0 голосов
/ 04 февраля 2012

Это потому, что вы не устанавливаете *pBMP внутри функции (вы устанавливаете pBMP, тип указателя).Изменение самого указателя не повлияет на его цель.

Аналогично, с index вы передаете значение, поэтому ничего не получается.

...