Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Возвращение лоакльной переменной

390
10 ноября 2005 года
lexus
143 / / 13.04.2004
Имеется функция класса 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 все нормально.Компилировалось без ошибок
Как избавиться от ошибки?
3
10 ноября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
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 все нормально.Компилировалось без ошибок
Как избавиться от ошибки?



Тебе же компилятор все объяснил.
Кстати, VS тоже сообщает об этом, но варнингом.
Ты возвращаешь ссылку на локальный объект, который будет уничтожен при выходе из метода, и ссылка станет невалидной.

585
10 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Green
Тебе же компилятор все объяснил.
Кстати, VS тоже сообщает об этом, но варнингом.
Ты возвращаешь ссылку на локальный объект, который будет уничтожен при выходе из метода, и ссылка станет невалидной.


Попробуй объявить ее как static, по крайней мере не уничтожится по выходу из функции

3
10 ноября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by honeybeer
Попробуй объявить ее как static, по крайней мере не уничтожится по выходу из функции



А представляешь, где-нибудь этот метод вызовется ещё раз до того, как обработается возвращенное значение.
То-то будет удивление что результат не соответствует действительности.

Не возвращай ссылку на локальный статик!

Верни просто значение, без ссылки:

template< typename ElType >ElType
CStack< ElType >::pop();

585
11 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Green
А представляешь, где-нибудь этот метод вызовется ещё раз до того, как обработается возвращенное значение.
То-то будет удивление что результат не соответствует действительности.

Не возвращай ссылку на локальный статик!

Верни просто значение, без ссылки:

template< typename ElType >ElType
CStack< ElType >::pop();


Я не утверждал, что сие есть гуд. Сам так не делаю, н-и-к-о-г-д-а.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог