класс геймобжекты .h + .cpp:Инициализация станд :: функция не принимает значение функции принимает 3 аргумента
typedef std::function<void(GameObject* triggerobject, GameObject* otherobject, TriggerAction action)> PhysicsCallback;
void GameObject::OnTrigger(GameObject* triggerobject, GameObject* otherobject, TriggerAction action)
{
if (m_OnTriggerCallback)
m_OnTriggerCallback(triggerobject, otherobject, action);
}
void GameObject::SetOnTriggerCallBack(PhysicsCallback callback)
{
m_OnTriggerCallback = callback;
}
Другой класс:
m_pSphere->SetOnTriggerCallBack(*pCbObj);
m_pSphere->OnTrigger(m_pWallLeft, m_pSphere, GameObject::TriggerAction(0));
Я полагал использовать OnTrigger () мне пришлось установить m_OnTriggerCallback. Когда я попытался передать соответствующие аргументы, я действительно застрял. Кажется почти невозможным инициализировать PhysicsCallback без ошибок компилятора.
Я пробовал: std::function<void(GameObject* triggerobject, GameObject* otherobject, GameObject::TriggerAction action)> *obj; *obj = (m_pWallRight, m_pSphere, GameObject::TriggerAction(0));
но не повезло. * obj не принимает никаких аргументов. Эти следующие строки дают одни и те же ошибки:
GameObject::PhysicsCallback *pCbObj; = new GameObject::PhysicsCallback(new std::function<void()>()); //term does not evaluate to a function taking 3 arguments
GameObject::PhysicsCallback *pCbObj = new GameObject::PhysicsCallback((m_pWallRight, m_pSphere, GameObject::TriggerAction(0)));
И эта линия *pCbObj = GameObject::PhysicsCallback(m_pWallRight, m_pSphere, GameObject::TriggerAction(0));
дает эту ошибку IntelliSense: http://puu.sh/gi29n/95f0f7855b.png
Я действительно путают, как использовать функцию SetOnTriggerCallBack?
Вы должны добавить прототип 'геймобжекты :: TriggerAction' здесь. – Telokis
'std :: function' должен быть инициализирован некоторым * вызываемым *, то, что может быть вызвано, как если бы это была функция. Ваш вызываемый должен быть функцией, функтором ... что-то, что принимает аргументы типов 'GameObject *, GameObject *, TriggerAction' и возвращает' void'. Вы пытаетесь создать 'PhysicsCallback' с этим выражением' (m_pWallRight, m_pSphere, GameObject :: TriggerAction (0)) ', который не является вызываемым. И что это - 'PhysicsCallback (new std :: function())'. Ошибки Intellisense не имеют большого значения, вы должны скопировать-вставить сообщения об ошибках, которые производит компилятор. –
Praetorian
Это соответствующее сообщение об ошибке компилятора: 'std :: function :: function': ни один из 10 перегрузок не смог преобразовать все типы аргументов –
Eiron