错误:使用未声明的标识符'self'c ++-目标c混合

时间:2018-08-24 12:50:57

标签: c++ ios objective-c mixing

我目前正在使用ue4完成针对iOS的游戏。我正在使用某些特定的iOS代码,并尝试使用“自我”变量调用方法

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

该代码位于#if PLATFORM_IOS和#endif的前置标记内

我认为我已经在cpp文件的开头声明了self变量:

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

    return self;
}

其他论坛提到虚幻引擎最终会编译所有cpp .mm,所以我认为这不是问题。

自变量始终用于目标c部分,因此对我的代码至关重要。如何正确混合代码并声明我的自变量?

谢谢

编辑:这是我尝试重新创建https://answers.unrealengine.com/questions/422323/callback-from-objective-c-back-to-the-c-layer.html

的部分

1 个答案:

答案 0 :(得分:1)

我一直都在混用C ++和Obj-C。 Obj-C类实例与C ++实例不同。 C ++类实例具有this。没有self。 Obj-C类实例具有self。您可以在此处了解更多信息:

Difference b/w Objective C's self and C++'s this?

假设您已经编写了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