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

Ваш аккаунт

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

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

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

Как вернуть указатель на объект?

3.9K
23 октября 2004 года
generalm
28 / / 20.10.2004
Предположим что у нас есть метод select в каком-то классе

tstr* tstr::select (tstr* str, int k) //ne gotovo
{
str=begin;

while (str!=NULL)
{
if (str->number==k) {
gotoxy (1,20);cout << " ";
gotoxy (1,20);cout << "!str->number="<<str->number<<" !k="<<k <<"sting="<<str->s;
gotoxy (40,19); cout << "str=" << str;
return str;
}
str=str->next;getch();
}
return str;
}

заметьте у нас есть cout'ы в которые все прекрасно выводится, вся нужна инфа!

------------------------
однако если в main()

мы вызываем select:

str->select (str,1) //ищем первый элемент
и надемся что теперь str указывает на нужный элемент то мы окажемся разочарованны, т.к

при str->имя любого метода

мы получим нулевой результат
так как если значие str после возвращения =0x000

???
это глюк??? или я что-то неправильно делаю?
3
23 октября 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by generalm
Предположим что у нас есть метод select в каком-то классе

tstr* tstr::select (tstr* str, int k) //ne gotovo
{
str=begin;

while (str!=NULL)
{
if (str->number==k) {
gotoxy (1,20);cout << " ";
gotoxy (1,20);cout << "!str->number="<<str->number<<" !k="<<k <<"sting="<<str->s;
gotoxy (40,19); cout << "str=" << str;
return str;
}
str=str->next;getch();
}
return str;
}

заметьте у нас есть cout'ы в которые все прекрасно выводится, вся нужна инфа!

------------------------
однако если в main()

мы вызываем select:

str->select (str,1) //ищем первый элемент
и надемся что теперь str указывает на нужный элемент то мы окажемся разочарованны, т.к

при str->имя любого метода

мы получим нулевой результат
так как если значие str после возвращения =0x000

???
это глюк??? или я что-то неправильно делаю?



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

Совершенно необосновано надеяться, что str как-либо изменится, т.к. str, который в main и str, который в tstr::select - это разные str. :)

С какой целью ты передаешь str в tstr::select?
Чтоб изменить его значение? Но дело в том, что передается лишь значение, которое ты заменяешь внутри на begin. Т.о. твоя запись тождественна такой:

Код:
tstr* tstr::select(int k)
{
  tstr* tmp_str = begin;

  while(NULL != tmp_str)
  {
    if(k == tmp_str->number)
    {
      .....
      return tmp_str;
    }
   
    tmp_str = tmp_str->next;
    getch();
  }
 
  return tmp_str;
}

а для того чтоб изменилось значение str (того, что в main) надо хотя бы воспользоваться оператором присваивания:
str = str->select(1);

Если же тебе ну очень надо, чтоб значение str изменялось внутри select, передавай ссылку или указатель на str:
tstr* tstr::select(tstr** pstr, int k);
tstr* tstr::select(tstr* &str, int k);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог