Четверг, 19 октября 2017, 22:47

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Страница 77 из 77«12757677
Модератор форума: Saitei 
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Вопрос-Ответ (C++)
KornivalДата: Воскресенье, 04 сентября 2011, 19:10 | Сообщение # 1
The Witcher
Сейчас нет на сайте
Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
VuvkДата: Четверг, 20 июля 2017, 11:19 | Сообщение # 1521
постоянный участник
Сейчас нет на сайте
Цитата FlyOfFly ()
в заголовочный файлах F1, есть подключен заголовочный файл F2, в которых подключен заголовочный файл F1, если в этом, то какой вариант - исправление?

попробовать выбросить #pragma once и использовать include guards
Код

#ifndef _F1_H
#define _F1_H
// содержимое хедэра
#endif // _F1_H


Ищу левелдизайнера/маппера
Мой блог
Мой канал на Youtube
Lokemundux Desco Domus Shaantitus. Caecux Vorox Acerbus-shatruex! Crudux Cruo!


Сообщение отредактировал Vuvk - Четверг, 20 июля 2017, 11:28
puksusДата: Четверг, 20 июля 2017, 12:03 | Сообщение # 1522
участник
Сейчас нет на сайте
FlyOfFly, а зачем вам 2 класса, нельзя ли провернуть так, чтобы класс хранил указатели на элементы своего же класса?

Ну а если по теме - то может помочь <не помню точно как называется> предобъявление класса. То есть в файле GameComponent.h удалите строчку
#include "GameObject.h"
и добавьте вместо неё
class GameObject;
это даст компилятору инфу о том, что класс геймобджект определён в ином месте, при этом взаимное подключение исчезнет. Но не гарантирую, что поможет. Да и потом могут быть проблемы. Я с таким уже сталкивался, когда писал игру на 12 гамирон. Из-за этого дела потом вылезали очень непонятные ошибки в непонятных местах, когда я что-то где-то чуть-чуть менял. Поэтому следующем проекте просто сделал всё так, чтобы не было нужды в подобных вещах.
Ну а ещё, старайтесь в h файлах подключать по-минимуму, а основные подключения делать в cpp файлах.
SaiteiДата: Пятница, 21 июля 2017, 11:09 | Сообщение # 1523
старожил
Сейчас нет на сайте
Цитата puksus ()
GameComponent.h удалите строчку
#include "GameObject.h"
и добавьте вместо неё
class GameObject;
это даст компилятору инфу о том, что класс геймобджект определён в ином месте,

+

Это называется forward declaration: https://en.wikipedia.org/wiki/Forward_declaration

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

P.S. это работает с ссылками и указателями на класс, а вот просто инстансировать объект ты не сможешь:
Код
class Foo;
...
Foo a; //wrong! Error!
FlyOfFlyДата: Суббота, 22 июля 2017, 14:41 | Сообщение # 1524
постоянный участник
Сейчас нет на сайте
Есть массив с указателями на функциями и двухмерный массив, который хранит аргументы(то-есть на каждую функцию - своя строка массива). Я не знаю какие функции храниться и сколько аргументов в массиве, можно ли как-то вызвать функцию такую?По логике, это должно делаться через asm, то-есть отправляем аргументы через push и потом вызываем функции через call, насколько я знаю в vs можно вызвать asm код, вопрос: как передать аргументы и вызвать функцию через asm-вставки

Добавлено (22 июля 2017, 14:41)
---------------------------------------------
Так, как отправить аргументы - разобрался, другой вопрос: как через asm вызвать функцию объекта


Вам нужен программист или помощью с частью проекта или задание на C# или Java, тогда я тот кто вам нужен. Вот мое резюме
Если вам нужна команда, то Conveyor ideas, готова выполнять ваши заказы по созданию пиксель-арт игр.


Сообщение отредактировал FlyOfFly - Суббота, 22 июля 2017, 14:29
Dmitriy_ZodiakДата: Воскресенье, 03 сентября 2017, 01:05 | Сообщение # 1525
был не раз
Сейчас нет на сайте
zodiak, вот зараза. Я думал такого ника нет.

В ютубе и многих сайтах криво и не информативно рассказанно . Скиньте хороших мануалов плз.
bodya_WMДата: Воскресенье, 03 сентября 2017, 08:28 | Сообщение # 1526
постоянный участник
Сейчас нет на сайте
FlyOfFly, в методах класса используется конвенция вызовов __thiscall.
Тебе нужно получить указатель на функцию в классе(например вот так):
Код

class Foo {
  void Bar();
};
...
Foo* foo = new Foo();
void* bar = Bar;
__asm {
  push foo
  call bar
}

__thiscall практически такой же как и cdecl, только ещё последним параметром добавляется указатель на экземпляр класса.
Ответ немного запоздалый но возможно поможет.


Разработчик игрового движка WaveGameEnvironment2D

Сообщение отредактировал bodya_WM - Воскресенье, 03 сентября 2017, 08:29
SaiteiДата: Воскресенье, 03 сентября 2017, 12:04 | Сообщение # 1527
старожил
Сейчас нет на сайте
Цитата bodya_WM ()
void* bar = Bar;

не думаю, что валидно.

Код
typedef void (Foo::*FuncPtr)();
FuncPtr bar = &Foo::Bar;
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Страница 77 из 77«12757677
Поиск:

Все права сохранены. GcUp.ru © 2008-2017 Рейтинг