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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
#1

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

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

переменная - C++
#include &lt;iostream&gt; using namespace std; void func1(); void func2(); int count; // Это голобальная переменная int main()...

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

Глобальная переменная - C++
#include &quot;stdafx.h&quot; #include &quot;locale&quot; #include &quot;iostream&quot; #include &quot;conio.h&quot; using namespace::std; int count = -1; void swap();...

Неинициализированная переменная - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; double func_x() { double x; cout &lt;&lt; &quot;Введите x = &quot;; cin &gt;&gt;...

Переменная не инициализирована - C++
Доброго времени суток. Tree.h #pragma once #include &lt;iostream&gt; template&lt;typename T&gt; struct Tree {

Переменная char - C++
#include&lt;iostream&gt; #include &lt;stdio.h&gt; using namespace std; int main () { setlocale(LC_CTYPE,&quot;Russian&quot;); char...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
173 / 27 / 5
Регистрация: 29.01.2013
Сообщений: 166
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
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 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
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
31.01.2013, 10:07     Не инкрементируется переменная #10
Цитата Сообщение от trdm Посмотреть сообщение
статические данные видны толькоо в статических функциях класса
Неверно. Вы, наверное, перепутали с тем, что нестатические данные не видны в статических методах. Но статические данные видны в нестатических методах, не вижу тому объективных препятствий.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2013, 11:02     Не инкрементируется переменная
Еще ссылки по теме:

Булевская переменная - C++
Написать программу, в результате выполнения которой булевская переменная t получает значение true, если выполняется указанное условие, и...

Междупроектная переменная - C++
Добрый день, есть проект в VS2013 - в нём 4 решения, 3 с которых &quot;движок&quot; и 1 мой проект. Как завести 1 переменную, чтобы её видели...

Булевская переменная - C++
Написать программу, в результате выполнения которой булевская переменная t получает значение true, если выполняется указанное условие, и...

Переменная в массиве - C++
почему я не могу сделать так.... #include &lt;iostream&gt; using namespace std; int main() { int q = 0; int s = {}; }


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

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

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