Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32

Не инкрементируется переменная

30.01.2013, 22:36. Показов 1411. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.

В общем так: в main() создается определенное юзером количество ботов

C++
1
    Bot *ptrBots = new Bot [ numberOfBots ];

Каждому боту я даю определенное имя. Здесь i - это закрытый static int элемент класса. Инициализируется нулем. nameForBot[] - это закрытый static string элемент класса
C++
1
2
3
4
5
6
7
8
Bot::Bot()
{
    
    setName( nameForBot[ i % 6 ] );
    i++;
    srand( time( 0 ) );
    style = rand() % 2;
}

Казалось бы, что каждый новый объект должен получать разное имя. Но по непонятной причине, всем им дается имя Jack. Хотя i инкременируется( проверял через cout<<i; )
В чем может быть ошибка?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2013, 22:36
Ответы с готовыми решениями:

В 4-ой строке j не инкрементируется
Объясните, почему в результате именно 0 получается? Почему в 4-ой строке j не инкрементируется? int j = 0; for (int i = 0; i &lt;...

Счетчик не инкрементируется в цикле
Почему то у меня данные выводится в цикле а $i не прибавляется?

Ошибка в коде. Не инкрементируется n
Здравствуйте. Помогите пожалуйста найти ошибку в коде: using System; using System.Collections.Generic; using System.ComponentModel;...

10
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
31.01.2013, 02:21
Цитата Сообщение от eoLithic Посмотреть сообщение
Хотя i инкременируется( проверял через cout<<i; )
может тогда setName покажете?
0
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 04:05  [ТС]
Croessmah,
не вопрос

C++
1
2
3
4
void Bot::setName( const string &nameForBot )
{
    GreatBot::setName( nameForBot ); // Bot - это производный класс от GreatBot
}
C++
1
2
3
4
void GreatBot::setName( const string &NAME )
{
    name = NAME;
}
0
182 / 37 / 5
Регистрация: 29.01.2013
Сообщений: 256
31.01.2013, 04:16
Цитата Сообщение от eoLithic Посмотреть сообщение
Привет.


Каждому боту я даю определенное имя. Здесь i - это закрытый static int элемент класса. Инициализируется нулем. nameForBot[] - это закрытый static string элемент класса

Казалось бы, что каждый новый объект должен получать разное имя. Но по непонятной причине, всем им дается имя Jack. Хотя i инкременируется( проверял через cout<<i; )
В чем может быть ошибка?
статические данные видны толькоо в статических функциях класса. Вроде. Давно не сишничал.
попробуй так.

C++
1
2
3
4
5
6
7
8
Bot::Bot()
{
    static int cntrBots = 0;
    setName( nameForBot[ cntrBots % 6 ] );
    cntrBots++;
    srand( time( 0 ) );
    style = rand() % 2;
}
0
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 04:36  [ТС]
trdm,
Откровенно говоря, я с самого начала так и сделал. Но была та же самая проблема: i инкрементируется, но ботам все равно дается одинаковое имя.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
31.01.2013, 04:40
а само имя у тебя часом не статическое?
Сначала хотел это назвать ошибкой, потом почитал, что ты говоришь статический только счётчик имён. Ну тогда информации почему имена одинаковые явно недостаточно.

а функция setName вообще корректно работает, если просто изменять имя одного бота и смотреть не изменилось ли у всех из-за бага?
0
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 04:55  [ТС]
Kuzia domovenok,
nameForBot[] - это закрытый static string элемент класса
Пардон, еще один вопрос. Я кажется нашел свою ошибку. Вроде бы она в main();
Так я вывожу имена ботов
C++
1
2
    for ( i = 0; i < numberOfBots; i++ )
        cout<<ptrBots->getName()<<endl;
Казалось бы, что надо бы сделать так:
C++
1
2
    for ( i = 0; i < numberOfBots; i++ )
        cout<<ptrBots[ i ]->getName()<<endl;
Но Вижуал Студио пишет: Error: выражение должно иметь тип указателя.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
31.01.2013, 04:57
Цитата Сообщение от eoLithic Посмотреть сообщение
C++
1
cout<<ptrBots[ i ]->getName()<<endl;
C++
1
cout<<ptrBots[ i ].getName()<<endl;
или
C++
1
cout<<(ptrBots+i)->getName()<<endl;
0
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 05:00  [ТС]
Проблема решена, всем спасибо, я - дурак.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
31.01.2013, 10:07
Цитата Сообщение от trdm Посмотреть сообщение
статические данные видны толькоо в статических функциях класса
Неверно. Вы, наверное, перепутали с тем, что нестатические данные не видны в статических методах. Но статические данные видны в нестатических методах, не вижу тому объективных препятствий.
0
182 / 37 / 5
Регистрация: 29.01.2013
Сообщений: 256
31.01.2013, 11:02
Цитата Сообщение от silent_1991 Посмотреть сообщение
Неверно. Вы, наверное, перепутали с тем, что нестатические данные не видны в статических методах. Но статические данные видны в нестатических методах, не вижу тому объективных препятствий.
верно. заработался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2013, 11:02
Помогаю со студенческими работами здесь

Не инкрементируется регистр таймера
Кратко о проблеме: Есть 16ая мега. Есть также прерывание схемы захвата(16 разр таймер), по прерыванию загружаю 2 байта из регистров ICR1. И...

QLcdNumber не инкрементируется.точнее программа виснет
Просто пытаюсь в цикле инкрементировать lcd number на форме int i=0; while(1) { ...

Entity Framework Database-First добавление данных. Не инкрементируется primary key
Здравствуйте, форумчане. Разбираюсь с добавлением данных в EF. Суть проблемы такая: при вставке данных в таблицу происходит добавление...

Переменная=Документ.имя. Сделать выборку всех документов с именем Переменная
Привет всем. У меня есть проблема и варианты решения, но они не работают. Проблема вот такая: Есть переменная Документ1 в...

Проблема с Adodc: 'Переменная объекта или переменная блока With не задана'
В свойствах самого контрола (MS ADO Data Control) проверка подключения к атблице (подключаюсь через ODBC) проходит нормально. Когда же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru