мне нужны окна, кнопки и тому подобное ! Так как азы уже давно позади.
Это тебе не формошлепство:). Изучай теперь WinAPI (те самые окна, кнопки), MFC (никогда не изучал и вообще сторонюсь этого монстра). Qt или WxWidget (в отличие от первых двух - мультиплатформа, да и код более понятный, но доки на русском нет) Мой блог Вики DirectX
Здравствуйте. Интересует такой вопрос. Есть класс GameObject в котором хранится различная информация. Этот класс хранится в векторе. При удалении какого либо объекта из вектора достаточно ли применить earse? Изучаю C++ попутно пишу игру.
Всем привет! Есть вопрос к хорошо знающим С людям. Есть переменная, одна функция ее изменяет, другая использует. Никакой связи между функциями нет. Функции выполняются как события. Очевидно, что переменная должна быть глобальной. Но мне интересно организовать это без глобальности, так чтоб другие функции ее не видели. Просто интересно, если хотите, считайте это моей причудой . Пример абстрактный, в проге немного не так. Вот моя идея:
Code
void init(void) { static int a, b; //static чтобы не удалились после выполнения init func_a::a = &a; func_b::b = &b; //добавить функции как обработчики событий }
void func_a(void) { static int *a; printf("%i\n", *a) }
Вопрос: я хотел бы сделать так, но 2-я и 3-я строчки из init() некорректные. Как инициализировать статик переменную функции из другой функции? В С++ статик переменные класса можно изменять, а как в С? Есть возможность?
Сообщение отредактировал SWFcreator - Суббота, 03 Ноября 2012, 21:12
Но ведь она только с виду локальная , она все равно существует в памяти, так почему бы ее не изменить? Идея в том, что бы 1 раз завязать указатели на одну переменную, а потом использовать значения локальных указателей. Есть идея добавить функциям дополнительный необязательный параметр, указателям присвоить его и один раз вызвать функции с ним. Сделать макросы без дополнительного параметра и использовать дальше их, но это уже как-то криво.
Она локальная, хоть и не стековая, а значит доступ извне к ней не предусмотрен. Извратиться и получить указатель на нее можно конечно, но это будет очень грязный и уродливый хак - так не делают. Испоьзуй глобальную переменную. Многие вопросы по Windows отпадут, если посмотреть тут
со словами Нарушение прав доступа при чтении "0x00000000". 0x00000000 - это у нас переменная hge типа *HGE, не могу понять почему он вылетает, помогите. FinderX - Android Аркада
Сообщение отредактировал goldsphere - Суббота, 17 Ноября 2012, 16:29
goldsphere, если ты объявишь один лишь указатель, то выделится память только под указатель, а не под данные, на которые он ссылается. А потом ты пытаешься обратиться к этим данным, что и приводит к ошибке доступа. Должна быть какая-то функция инициализации или что-то в этом духе, руководство по движку тебе в помощь.
goldsphere, если ты объявишь один лишь указатель, то выделится память только под указатель, а не под данные, на которые он ссылается. А потом ты пытаешься обратиться к этим данным, что и приводит к ошибке доступа. Должна быть какая-то функция инициализации или что-то в этом духе, руководство по движку тебе в помощь.
Дело в том, что все функции вырывающиеся через hge работают. Если текстуру, как отдельную переменную объявить(не в классе, а допустим в main),то всё нормально робит. Пробую HGE *hge = new(HGE); , подчёркивает (HGE) и говорит, что Нельзя использовать объект абстрактного класса HGE
Quote (MR_Borg)
goldsphere, у вас загрузка текстуры объявлена позже создания спрайта, переставьте местами.
goldsphere, а hge у тебя объявлен глобальной переменной? Ну и создается он не через new, а с помощью функции hgeCreate. И само собой что он должен создаваться до использования. Всё гениальное просто. И хреново работает.