неверное использование "этого" вне ошибки нестатической функции-члена?

76
9

Я использую CCTouchTargetedDelegate с классом, подклассом которого является CCSprite. при определении методов делегирования я не могу использовать "это" внутри функций.

как ответили на ранее заданные вопросы, я не мог использовать имя класса с функцией с использованием разрешения области, потому что тогда он дал мне ошибку "Внекорректное определение" ccTouchBegan "не соответствует объявлению в" mygames ":: DragSprite ""

Я также попытался объявить функцию в файле.h, но ничего не работает.

Мой код выглядит следующим образом:

Файл.h

#pragma once
#include "cocos2d.h"

namespace mygames
{

class DragSprite: public cocos2d::CCSprite, public cocos2d::CCTargetedTouchDelegate
{
public:
DragSprite* createWithFile(const char *pszFileName);
bool isTouchingOnSprite(cocos2d::CCPoint touch);
virtual bool init();
bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
static inline cocos2d::CCPoint ccpSub(const cocos2d::CCPoint v1, const cocos2d::CCPoint v2);
private:
bool isDrag;
cocos2d::CCPoint whereTouch;
};
}

.cpp файл

#include "DragSprite.h"

using namespace mygames;

bool DragSprite::init()
{
if (!CCSprite::init()) {
return false;
}

whereTouch = cocos2d::CCPointZero;
isDrag = false;

return true;
}
DragSprite* DragSprite::createWithFile(const char *pszFileName)
{
DragSprite *pSprite = new DragSprite();
if (pSprite&&pSprite->initWithFile(pszFileName))
{
cocos2d::CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(pSprite, 0, true);
pSprite->autorelease();
return pSprite;
}
CC_SAFE_DELETE(pSprite);
return NULL;
}

bool DragSprite::isTouchingOnSprite(cocos2d::CCPoint touch)
{

if (this->boundingBox().containsPoint(touch)) {
return true;
}else
{
return false;
}

}
static inline cocos2d::CCPoint ccpSub(const cocos2d::CCPoint v1, const cocos2d::CCPoint v2)
{
return ccp(v1.x-v2.x, v1.y-v2.y);

}
//CCTargetedTouchDelegate
bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{

cocos2d::CCPoint touchPoint = pTouch->getLocation();

if (this->isTouchingOnSprite(touchPoint)) {
this->whereTouch = ccpSub(this->position, touchPoint);
return true;
}
return false;
}

Скриншот ошибки: -

Что мне здесь не хватает?

ПРОСТО ИЗ ЛЮБОПЫТСТВА

AS, предложенный в ответах, если я использую

bool DragSprite::ccTouchBegan

Итак, будет ли она по-прежнему вызывать функцию delegete? или просто функция из моего класса DragSprite. Я имею в виду, будет ли функция еще отменена? ну... его метод объявлен в CCTargetedTouchDelegete. и я предполагаю, что это абстрактная функция.

спросил(а) 2014-05-05T09:21:00+04:00 6 лет, 11 месяцев назад
1
Решение
157

bool ccTouchBegan(

должно быть

bool DragSprite::ccTouchBegan(

Вам не нужно this в первую очередь.

ответил(а) 2014-05-05T09:24:00+04:00 6 лет, 11 месяцев назад
44

Эта

bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)

определяет автономную функцию. это можно использовать только в функции класса. Чтобы сделать его членом класса, как вы его определили, вам нужно квалифицировать имя:

bool DragSprite::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)

- = - = - = - =

Я вижу, как все сразу вскочили. Синтаксис объектива C отличается. Оно использует

@implementation DragSprite
. . . .

@end

для указания класса и требует a - для указания нестационарной функции-члена.

Другое отличие состоит в том, что Objective C требует саморегуляции для вызова функции-члена

[self DragSprite] ;

C++ не

DragSprite () ;

ответил(а) 2014-05-05T09:26:00+04:00 6 лет, 11 месяцев назад
44

Почему бы не определить свою функцию как

bool DragSprite::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)

как вы определили его в классе DragSprite в вашем.h файле.

ответил(а) 2014-05-05T09:24:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема