ios — ошибка: использование необъявленного идентификатора ‘self’ c ++ — цель c смешиванием

В настоящее время я заканчиваю свою игру для iOS, используя ue4. Я использую какой-то определенный код iOS и пытаюсь вызывать методы, используя переменную self

void Aaccessactorios::Shareoption() {
[self Sharebutton];//ios
}

код находится внутри тега препроцессора #if PLATFORM_IOS и #endif

Я думаю, что я объявил переменную self в начале моего файла cpp:

-(id)init
{
self = [super init];

return self;
}

Другие форумы Следует упомянуть, что движок Unreal собирает все cpp .mm в конце, так что я не думаю, что это проблема.

Переменная self используется вокруг цели c, поэтому она важна для моего кода. Как правильно смешать код и сделать так, чтобы моя переменная self объявлялась?

Спасибо

редактировать: это часть, которую я пытаюсь воссоздать https://answers.unrealengine.com/questions/422323/callback-from-objective-c-back-to-the-c-layer.html

-1

Решение

Я постоянно смешиваю C ++ и Obj-C. Экземпляр класса Obj-C отличается от экземпляра C ++. Экземпляр класса C ++ имеет this, Здесь нет self, Экземпляр класса Obj-C имеет self, Вы можете прочитать больше об этом здесь:

Разница в ч / б Объективность С и С ++ это?

Исходя из того, что вы написали, у вас есть класс C ++ Aaccessactorios, Не ясно, кто определил Sharebutton, Если он находится в классе C ++, то вы бы назвали его как

this->Sharebutton();

или просто

Sharebutton();

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

void Aaccessactorios::Shareoption(ObjCClassObj *obj) {
[obj Sharebutton];//ios
}

В этой ссылке на код вы можете видеть, что они на самом деле делают первое.

 class IOSMediaPlayerController
{
public:
IOSMediaPlayerController();
~IOSMediaPlayerController();
void startPlayback();
void stopPlayback();
void callbackFunc();

#if PLATFORM_IOS
IOSMediaPlayerControllerObj *playerObj;
#endif
};

Здесь вы можете увидеть, что playerObj является ссылкой (указателем) на объект Obj-C. Это создано в конструкторе с этим

 IOSMediaPlayerController::IOSMediaPlayerController()
{
#if PLATFORM_IOS
playerObj = [[IOSMediaPlayerControllerObj alloc] init];
#endif
}

И затем вызывается

 void IOSMediaPlayerController::startPlayback()
{
#if PLATFORM_IOS
[playerObj startPlayback];
#endif
}

Обратите внимание, пример кода не вызывает self, он вызывает созданный конструктором экземпляр playerObj,

0

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

Других решений пока нет …

По вопросам рекламы [email protected]