Поиск:

Ответ в темуСоздание новой темы Создание опроса
> непойму почему Warning 
:(
    Опции темы
Гость_guest
  Дата 3.11.2004, 02:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот значит следующий варнинг:
Temporary used for parameter 'arr' in call to 'SetVals(int * &)'

Если сделать типа такого:
Код

void SetVals(int *&arr)
{
arr[0] = 1;
arr[1] = 2;
}

void SomeFunction(void)
{
int MyArray[2] = {0,0};
SetVals(MyArray);
}

Но все компилится и работает, а варнинг вылезает, что сделать чтоб его убрать? :qstn
  Вверх
Borisff2003
Дата 3.11.2004, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 26.2.2004
Где: г. Уфа

Репутация: нет
Всего: 1



А почему не так

Код

void SetVals(int *arr)

--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
Дрон
Дата 3.11.2004, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 93



Borisff2003
Ты прав. Ссылка там нафик не нужна :)

А warning вылазит потому, что когда ты объявляешь int MyArray[2], то этот массив является константой в том плане, что изменить значение указателя MyArray нельзя. Когда ты его передаёшь по ссылке &, то компилятор предполагает, что ты можешь внутри функции написать, например arr = NULL; и это должно бы повлиять на MyArray, что вызывает противоречие с вышесказанным.
По непонятным мне причинам компилятор всё же старается решить эту проблему и поступает так: создаёт временную переменную со значением равным MyArray и передаёт её по ссылке. В итоге, если ты даже внутри функции изменишь значение arr (только не путать с элементами массива arr -- их можно менять без проблем), то это отразится только на временной переменной, значение которой всё равно будет забыто.

В общем такой warning на грани ошибки. И от него обязательно нужно избавлться.


--------------------
Да. Именно так.
PM   Вверх
Guest
Дата 3.11.2004, 16:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Borisff2003
Дрон
Огромное спасибо!
Тогда почему тут без & ничего неработает?
Код

void SetOneVal(int &val)
{
val = 3;
}

  Вверх
Дрон
Дата 4.11.2004, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 93



Guest
Потому, что без & параметр передаётся по значению, и ты работаешь с его копией, изменения которой не влияют на исходную переменную.
Но чувствую, что в двух словах я нормально объяснить не смогу. А на две страницы писать лень :)

Почитай лучше внимательно что-нибудь про передачу параметров, указатели и ссылки.

ЗЫ: Кстати, было бы неплохо на форуме. И тебе, и нам будет удобнее общаться :)


--------------------
Да. Именно так.
PM   Вверх
Quadruple
  Дата 4.11.2004, 04:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 4.11.2004

Репутация: нет
Всего: нет



Дрон
Спасибо!

ЗЫ я зарегился.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.