Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
30.01.2013, 22:36     Не инкрементируется переменная #1
Привет.

В общем так: в 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; )
В чем может быть ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2013, 22:36     Не инкрементируется переменная
Посмотрите здесь:

C++ переменная
булевская переменная C++
C++ строковая переменная
C++ Переменная
Не иницилизированна переменная C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
31.01.2013, 02:21     Не инкрементируется переменная #2
Цитата Сообщение от eoLithic Посмотреть сообщение
Хотя i инкременируется( проверял через cout<<i; )
может тогда setName покажете?
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 04:05  [ТС]     Не инкрементируется переменная #3
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;
}
trdm
166 / 20 / 4
Регистрация: 29.01.2013
Сообщений: 137
31.01.2013, 04:16     Не инкрементируется переменная #4
Цитата Сообщение от 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;
}
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 04:36  [ТС]     Не инкрементируется переменная #5
trdm,
Откровенно говоря, я с самого начала так и сделал. Но была та же самая проблема: i инкрементируется, но ботам все равно дается одинаковое имя.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
31.01.2013, 04:40     Не инкрементируется переменная #6
а само имя у тебя часом не статическое?
Сначала хотел это назвать ошибкой, потом почитал, что ты говоришь статический только счётчик имён. Ну тогда информации почему имена одинаковые явно недостаточно.

а функция setName вообще корректно работает, если просто изменять имя одного бота и смотреть не изменилось ли у всех из-за бага?
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 04:55  [ТС]     Не инкрементируется переменная #7
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: выражение должно иметь тип указателя.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
31.01.2013, 04:57     Не инкрементируется переменная #8
Цитата Сообщение от eoLithic Посмотреть сообщение
C++
1
cout<<ptrBots[ i ]->getName()<<endl;
C++
1
cout<<ptrBots[ i ].getName()<<endl;
или
C++
1
cout<<(ptrBots+i)->getName()<<endl;
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 05:00  [ТС]     Не инкрементируется переменная #9
Проблема решена, всем спасибо, я - дурак.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
31.01.2013, 10:07     Не инкрементируется переменная #10
Цитата Сообщение от trdm Посмотреть сообщение
статические данные видны толькоо в статических функциях класса
Неверно. Вы, наверное, перепутали с тем, что нестатические данные не видны в статических методах. Но статические данные видны в нестатических методах, не вижу тому объективных препятствий.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2013, 11:02     Не инкрементируется переменная
Еще ссылки по теме:

C++ Переменная в TextBox
C++ Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
C++ Междупроектная переменная

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

Или воспользуйтесь поиском по форуму:
trdm
166 / 20 / 4
Регистрация: 29.01.2013
Сообщений: 137
31.01.2013, 11:02     Не инкрементируется переменная #11
Цитата Сообщение от silent_1991 Посмотреть сообщение
Неверно. Вы, наверное, перепутали с тем, что нестатические данные не видны в статических методах. Но статические данные видны в нестатических методах, не вижу тому объективных препятствий.
верно. заработался.
Yandex
Объявления
31.01.2013, 11:02     Не инкрементируется переменная
Ответ Создать тему
Опции темы

Текущее время: 06:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru