Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: [Решено] C++ указатели, где-то напартачил, помогите плиз  (Прочитано 638 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн amdlintuxos

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
Доброго времени суток!
В общем буду краток:
Код программы:
http://bpaste.net/show/15661/

вывод программы:
id in Constructor: 0
id in Constructor: 1
id in Constructor: 2
id in Constructor: 3
id in Constructor: 4
id in Constructor: 5
id in Constructor: 6
id in Constructor: 7
id in Constructor: 8
id in Constructor: 9
id Static: 9
id Static: 9
id Static: 9
id Static: 9
id Static: 9
id Static: 9
id Static: 9
id Static: 9
id Static: 9
id Static: 9
Вопрос, почему id Static не такой как в конструкторе (ожидаю получить 0,1,2,3...9). Где-то напутал(получается указатель работает на последний елемент только).
Подскажите где неверено?



Пользователь решил продолжить мысль 23 Апреля 2011, 00:26:01:
мне подсказали и обяснили решение
 for(int i = 0; i<ob_max_num; i++)
    { Ob *ob = new Ob(i, 0);
      ship.push_back(ob);
    }
всё теперь работает
« Последнее редактирование: 23 Апреля 2011, 00:26:26 от amdlintuxos »
что не збудется - позабудется

Оффлайн rvlsoft

  • Любитель
  • *
  • Сообщений: 80
    • Просмотр профиля
У Вас два цикла выполняются по очереди, при чем первый цикл отражает последовательно, а воторой просто повторяет id, а значит он будет отражать только последний на котором остановилась предыдущая функция.

Попробуйте вывод id Static прописать внутри цикла где выводится id in Constructor. это будет где-то так:

int main( int argc, char **argv )
{   int ob_max_num = 10;
   
    pOb_type ship(0);

    for(int i = 0; i<ob_max_num; i++)
    { Ob ob = Ob(i, 0);
      ship.push_back(&ob);
     (*ship).renderStatic();
    }
       
    return(0);
}

Просто не знаю какое задание, но типа того должно быть, чтобы все выполнялось в одном цикле, т.к. второй цикл выполняется после окончания первого цикла. Если же должно быть все-таки два цикла, тогда попробуйте "i" обнулить, хотя может не помочь

Оффлайн amdlintuxos

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
Просто не знаю какое задание, но типа того должно быть, чтобы все выполнялось в одном цикле
задание пока фиктивное, играюсь с синтаксисом(перевожу кое какие приёмы с python на C++). первый цыкл создание игровых обьектов (выполняется один раз за игру), а второй доступ к методам класса созданных обьектов (апдейты позиции и рендер, которые будут позже выполнятся в бесконечном цыкле (game loop)).

Если же должно быть все-таки два цикла, тогда попробуйте "i" обнулить, хотя может не помочь
как мне обяснили в первом цыкле я работал с областью памяти указующую на один и тот же обьект(новый обьект не создавался как я этого хотел). по мере выполнения цикла id инкрементировался, но посути я не создавал новый обьект а менял id уже существующего, о чём я после програмирования в python догадался не сразу.

Второй цыкл в массиве содержал ссылки на один и тот же обьект с последним сгенерированным id (поэтому вывод id одинаков).

Проблема уже решена исползованием следующей конструкции:
for(int i = 0; i<ob_max_num; i++)
    { Ob *ob = new Ob(i, 0);
      ship.push_back(ob);
    }
спасибо.
что не збудется - позабудется

 

Страница сгенерирована за 0.026 секунд. Запросов: 25.