LINUX.ORG.RU

C++ изменение переменной во времени

 , ,


0

1

Есть некий класс объекта Agent, в нем есть публично-статическая переменная направления int. Agent инициализируется в другом классе, и эта переменная у него изменяется с течением времени в цикле, но ее изменение влияет на все инициализированные агенты, а нужно, что бы для отдельно взятого свое число. Как это написать? Что бы переменная класса изменялась лишь у вызванного экземпляра?
Вырезка кода:

//Agent.h
#pragma once
class Agent
{
public:
	static int dir;
};

//Agent.cpp
int Agent::dir = 0;

//Вызывающий.h
#pragma once
class MainScene
{
private:
        Agents m_agents;
};

//Вызывающий.cpp
for (int i = 0; i < 10; i++){
Agent *m_agent = m_agents.Add("unit",i);
}
Render::draw(float TikDelta) {
foreach (Agent obj in m_agents) {
obj.dir = obj.dir * 2 * TikDelta;
}
}

А зачем ты сделал ее статической? Разделай обратно.

Begemoth ★★★★★ ()
Ответ на: комментарий от Begemoth

да ладно, вопрос чисто технический. обычное недопонимание у человека. ну в смысле... если бы вопрос задал обычный человек, отнеслись бы просто - ответили бы или проигнорировали. считаю, несмотря на репутацию, правильно поступить именно так.

топикстартеру - Begemoth правильно сказал, разделай переменную из статической в обычную переменную объекта и будет как раз так как ты хочешь.

AndreyKl ★★★★★ ()
Ответ на: комментарий от AndreyKl

обычное недопонимание у человека

Этот человек уже неоднократно заявлял, что С++ он не выбирал и учить его не хочет, а работу сдать надо. См. error LNK2019 (комментарий)

Так что пусть этот человек идёт в /Job, либо берёт книгу и изучает язык. Не нужно делать из ЛОРа очередной говнофорум помощи студентам по типу CyberForum.Ru

EXL ★★★★★ ()

особенно радует аватарка этого дурачка

anonymous ()
Ответ на: комментарий от EXL

Этот человек уже неоднократно заявлял, что С++ он не выбирал и учить его не хочет, а работу сдать надо.

Не верь мне, я разрешаю.

ioexception ()
Ответ на: комментарий от ioexception

Так ты ответишь на вопрос, зачем тебе от статической переменной поведение переменной экземпляра?

buddhist ★★★★★ ()
Ответ на: комментарий от buddhist

не зачем, просто на всякий случай, что бы была возможность изменить ее из любого класса.

ioexception ()
Ответ на: комментарий от ioexception

так ты ее и счас можеш изменить, просто ее также могут менять и другие экземпляры класса. Но если ты хочеш изменить поведение, но не хочеш ломать работоспособность другого кода - то используй другую.

webmak ★★ ()
Последнее исправление: webmak (всего исправлений: 2)
Ответ на: комментарий от webmak

Убрал статик, но теперь программа совсем крешится при запуске.

ioexception ()
Ответ на: комментарий от ioexception

Я же написал - чтоб сохранить работоспособность того, что уже накостыляли - костыляй отдельную.

А вообще я в таких случая делаю set и get методы, мне помогает)

webmak ★★ ()
Последнее исправление: webmak (всего исправлений: 4)
Ответ на: комментарий от webmak

Прочитал, как понять «другую»? Мне нужно число типа int, которое бы хранило динамическое значение поворота для инициализированного агента.

ioexception ()
Ответ на: комментарий от ioexception

пробдлема создать еще одну переменную для этого? Создай свой класс на базе действующего и там создай свою переменную - если нельзя править базовый.

webmak ★★ ()
Последнее исправление: webmak (всего исправлений: 2)

static int dir;

это же азы, иди читай Страуструпа.

backburner ()
Ответ на: комментарий от webmak

Базового нету, этот/эти классы написаны мной и ни от кого не наследуется. Изменять могу что угодно, проблема не в этом, а в том, что со статической хоть и не работало как надо, но все же работало, а с просто публичной, программа крешится при запуске, понятно что я просто окурителен и руки у меня золотые, но как поправить не пойму. Вся эта вакханалия изначально от этого: Алгоритм арканоида

ioexception ()
Ответ на: комментарий от webmak

пробдлема создать еще одну переменную для этого?

Не надо таких советов, это же будет еще +2 треда на ЛОРе.

backburner ()
Ответ на: комментарий от EXL

Этот человек уже неоднократно заявлял, что С++ он не выбирал и учить его не хочет, а работу сдать надо

ну походу тут не в c++ проблема)

webmak ★★ ()

Иди в Job. Там наверняка найдутся товарищи, которые напишут твой курсач/лабу за тебя (ты им только денежку заплати и всё). Блин, ты хоть про static почитай что-ли. А то даже тот факт того, что ты принесешь готовую лабу не поможет тебе.

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

вспомнилась народная поговорка:

Как подумаю как я диплом получал, страшно к врачам идти

webmak ★★ ()
Последнее исправление: webmak (всего исправлений: 1)
Ответ на: комментарий от ioexception

Agent *m_agent = m_agents.Add(«unit»,i);

вероятно, ошибка здесь. возможно, вы всё ещё не осилили указатели

for (int i = 0; i < 10; i++){
Agent *m_agent = m_agents.Add("unit",i);
}

фигурные скобки здесь необязательны

 
foreach (Agent obj in m_agents) {
obj.dir = obj.dir * 2 * TikDelta;
}

in? С++17? в текущем стандарте вместо in должно быть двоеточие, странно, что ваш код вообще компилируется.

next_time ★★★★★ ()
Последнее исправление: next_time (всего исправлений: 3)
Ответ на: комментарий от next_time

С++17

foreach (Agent obj in m_agents)

Nein, эта херня из STL/CLR из виндовой VC++. ТС, походу, пишет на оффтопике в адовой смеси C++ и CLI.

А в C++17 range-based for loop будет как и в C++11, но переменная будет автоматически иметь тип rvalue-ссылки auto&&.

Shadow1251 ()
Ответ на: комментарий от Shadow1251

Nein, эта херня из STL/CLR из виндовой VC++. ТС, походу, пишет на оффтопике в адовой смеси C++ и CLI.

печально( придётся в его треды больше не писать

А в C++17 range-based for loop будет как и в C++11, но переменная будет автоматически иметь тип rvalue-ссылки auto&&.

но ведь для типов малого размера такой подход неэффективен. надо будет про это почитать.

next_time ★★★★★ ()

Может начнешь домашнее задание сам уже делать?

Oxdeadbeef ★★★ ()
Ответ на: комментарий от Shadow1251

ТС, походу, пишет на оффтопике в адовой смеси C++ и CLI.

Не факт кстати, конструкция foreach в студии и в обычных плюсах (без CLI) компилируется и работает.

Amp ★★★ ()
Ответ на: комментарий от AndreyKl

да ладно, вопрос чисто технический.

Наивняк

anonymous ()

Может пора вводить бан за вопросы в профильном форуме тому, кто начисто отказывается хотя бы полистать учебник?

andreyu ★★★★★ ()

Статическая переменная класса - она одна на весь класс. Если хочешь, чтобы у каждого экземпляра класса была своя переменная, то делай ее не статической.

hlebushek ()
Ответ на: комментарий от Stil

Формально всё ок, да и находятся люди которым не впадлу.

Мну такое подёргивания сиго тега, тоже слегка раздражает. Тем более, что к линуху сии вопросы относятся чуть меньше чем никак, кроме того афтор спалилсо что пилит в студии.

pon4ik ★★★★★ ()
Ответ на: комментарий от ioexception

не зачем, просто на всякий случай, что бы была возможность изменить ее из любого класса.

давай назад иди в свой пхп.

emulek ()
Ответ на: комментарий от emulek

давай назад иди в свой пхп.

В похапе возможностей образовать геморрой последующим читателям кода не меньше - вы ирли этого хотите? Мне кажется разумнее если я буду доставлять неудобства в каком-то одном языке, а не во всех сразу.

ioexception ()

Я очень хочу увидеть лицо твоего препода, когда ты ему свою работу сдавать будешь, чувтвую, ты дядечке жизнь надолго продлишь.

cherry-pick ()

очень толсто, раньше было тоньше)

tyro33 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.