неверное использование ‘this’ за пределами нестатической функции-члена?

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

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

Я также пытался объявить функцию в файле .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;
}

Снимок экрана ошибки: —

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

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

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

bool DragSprite::ccTouchBegan

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

3

Решение

bool ccTouchBegan(

должно быть

bool DragSprite::ccTouchBegan(

Вам не нужно this на первом месте.

13

Другие решения

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

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

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

0

это

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

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

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

-= — = — = — =

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

@implementation DragSprite
. . . .

@end

указать класс и требует — указать нестатическую функцию-член.

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

[self DragSprite] ;

C ++ не

DragSprite () ;
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector