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

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

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

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

30.01.2013, 22:36. Просмотров 589. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не инкрементируется переменная (C++):

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

Переменная или переменная и условие - C++
Привет всем. Стало интересно. Есть предположим функция. В ней ссылкой передается аргумент Status; Как лучше сделать? ...

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

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

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

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

10
Croessmah
Эксперт CЭксперт С++
13514 / 7672 / 866
Регистрация: 27.09.2012
Сообщений: 18,891
Записей в блоге: 3
Завершенные тесты: 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
173 / 27 / 5
Регистрация: 29.01.2013
Сообщений: 181
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
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 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
Эксперт CЭксперт С++
13514 / 7672 / 866
Регистрация: 27.09.2012
Сообщений: 18,891
Записей в блоге: 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;
0
eoLithic
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 32
31.01.2013, 05:00  [ТС] #9
Проблема решена, всем спасибо, я - дурак.
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
31.01.2013, 10:07 #10
Цитата Сообщение от trdm Посмотреть сообщение
статические данные видны толькоо в статических функциях класса
Неверно. Вы, наверное, перепутали с тем, что нестатические данные не видны в статических методах. Но статические данные видны в нестатических методах, не вижу тому объективных препятствий.
0
trdm
173 / 27 / 5
Регистрация: 29.01.2013
Сообщений: 181
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
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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