Возвращение лоакльной переменной
template< typename ElType >ElType& CStack< ElType >::pop()
{
ElType perem=m_Top->o_Val;
--m_Size;
Link< ElType > * temp = m_Top->o_Next;
delete m_Top;
m_Top = temp;
return perem;
}
Builder выдает ошибку
E2363 Attempting to return a reference to local variable 'identifier'
В Visual все нормально.Компилировалось без ошибок
Как избавиться от ошибки?
Цитата:
Originally posted by lexus
Имеется функция класса CStack
template< typename ElType >ElType& CStack< ElType >::pop()
{
ElType perem=m_Top->o_Val;
--m_Size;
Link< ElType > * temp = m_Top->o_Next;
delete m_Top;
m_Top = temp;
return perem;
}
Builder выдает ошибку
E2363 Attempting to return a reference to local variable 'identifier'
В Visual все нормально.Компилировалось без ошибок
Как избавиться от ошибки?
Имеется функция класса CStack
template< typename ElType >ElType& CStack< ElType >::pop()
{
ElType perem=m_Top->o_Val;
--m_Size;
Link< ElType > * temp = m_Top->o_Next;
delete m_Top;
m_Top = temp;
return perem;
}
Builder выдает ошибку
E2363 Attempting to return a reference to local variable 'identifier'
В Visual все нормально.Компилировалось без ошибок
Как избавиться от ошибки?
Тебе же компилятор все объяснил.
Кстати, VS тоже сообщает об этом, но варнингом.
Ты возвращаешь ссылку на локальный объект, который будет уничтожен при выходе из метода, и ссылка станет невалидной.
Цитата:
Originally posted by Green
Тебе же компилятор все объяснил.
Кстати, VS тоже сообщает об этом, но варнингом.
Ты возвращаешь ссылку на локальный объект, который будет уничтожен при выходе из метода, и ссылка станет невалидной.
Тебе же компилятор все объяснил.
Кстати, VS тоже сообщает об этом, но варнингом.
Ты возвращаешь ссылку на локальный объект, который будет уничтожен при выходе из метода, и ссылка станет невалидной.
Попробуй объявить ее как static, по крайней мере не уничтожится по выходу из функции
Цитата:
Originally posted by honeybeer
Попробуй объявить ее как static, по крайней мере не уничтожится по выходу из функции
Попробуй объявить ее как static, по крайней мере не уничтожится по выходу из функции
А представляешь, где-нибудь этот метод вызовется ещё раз до того, как обработается возвращенное значение.
То-то будет удивление что результат не соответствует действительности.
Не возвращай ссылку на локальный статик!
Верни просто значение, без ссылки:
template< typename ElType >ElType
CStack< ElType >::pop();
Цитата:
Originally posted by Green
А представляешь, где-нибудь этот метод вызовется ещё раз до того, как обработается возвращенное значение.
То-то будет удивление что результат не соответствует действительности.
Не возвращай ссылку на локальный статик!
Верни просто значение, без ссылки:
template< typename ElType >ElType
CStack< ElType >::pop();
А представляешь, где-нибудь этот метод вызовется ещё раз до того, как обработается возвращенное значение.
То-то будет удивление что результат не соответствует действительности.
Не возвращай ссылку на локальный статик!
Верни просто значение, без ссылки:
template< typename ElType >ElType
CStack< ElType >::pop();
Я не утверждал, что сие есть гуд. Сам так не делаю, н-и-к-о-г-д-а.