Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
1

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

30.01.2013, 22:36. Просмотров 662. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2013, 22:36
Ответы с готовыми решениями:

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
Исходники: /* main.cpp */ #include &quot;hider.h&quot; int main(void) { return 0;...

Переменная или переменная и условие
Привет всем. Стало интересно. Есть предположим функция. В ней ссылкой...

переменная
#include &lt;iostream&gt; using namespace std; void func1(); void func2(); ...

Переменная
Мне нужная переменная(ые) в 1 байт. Где её можно взять?

В 4-ой строке j не инкрементируется
Объясните, почему в результате именно 0 получается? Почему в 4-ой строке j не...

10
Croessmah
++Ͻ
14775 / 8451 / 1605
Регистрация: 27.09.2012
Сообщений: 20,799
Записей в блоге: 2
Завершенные тесты: 1
31.01.2013, 02:21 2
Цитата Сообщение от eoLithic Посмотреть сообщение
Хотя i инкременируется( проверял через cout<<i; )
может тогда setName покажете?
0
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;
}
0
trdm
179 / 34 / 5
Регистрация: 29.01.2013
Сообщений: 231
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;
}
0
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 04:36  [ТС] 5
trdm,
Откровенно говоря, я с самого начала так и сделал. Но была та же самая проблема: i инкрементируется, но ботам все равно дается одинаковое имя.
0
Kuzia domovenok
2443 / 2151 / 525
Регистрация: 25.03.2012
Сообщений: 7,748
Записей в блоге: 1
31.01.2013, 04:40 6
а само имя у тебя часом не статическое?
Сначала хотел это назвать ошибкой, потом почитал, что ты говоришь статический только счётчик имён. Ну тогда информации почему имена одинаковые явно недостаточно.

а функция setName вообще корректно работает, если просто изменять имя одного бота и смотреть не изменилось ли у всех из-за бага?
0
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: выражение должно иметь тип указателя.
0
Croessmah
++Ͻ
14775 / 8451 / 1605
Регистрация: 27.09.2012
Сообщений: 20,799
Записей в блоге: 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;
0
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 05:00  [ТС] 9
Проблема решена, всем спасибо, я - дурак.
0
silent_1991
Эксперт С++
5011 / 3071 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
31.01.2013, 10:07 10
Цитата Сообщение от trdm Посмотреть сообщение
статические данные видны толькоо в статических функциях класса
Неверно. Вы, наверное, перепутали с тем, что нестатические данные не видны в статических методах. Но статические данные видны в нестатических методах, не вижу тому объективных препятствий.
0
trdm
179 / 34 / 5
Регистрация: 29.01.2013
Сообщений: 231
31.01.2013, 11:02 11
Цитата Сообщение от silent_1991 Посмотреть сообщение
Неверно. Вы, наверное, перепутали с тем, что нестатические данные не видны в статических методах. Но статические данные видны в нестатических методах, не вижу тому объективных препятствий.
верно. заработался.
0
31.01.2013, 11:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2013, 11:02

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru