【问题标题】:error: Use of undeclared identifier 'self' c++-objective c mixing错误:使用未声明的标识符 'self' c++-objective c 混合
【发布时间】:2018-08-24 12:50:57
【问题描述】:

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

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

代码位于前处理器标签#if PLATFORM_IOS 和#endif 中

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

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

    return self;
}

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

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

谢谢

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

【问题讨论】:

  • 据我所知,一个类不能既是C++类又是Objective-C类。 self 之于 Objective-C 就像 this 之于 C++ - 你不声明它,它是由语言为你提供的。(我也相信你的 init 如果它在 .cpp 中应该会产生错误文件。)
  • self 是未声明的标识符。什么不清楚?声明变量并为其分配对象。
  • 请注意,您链接的示例未在 C++ 类中使用 self

标签: c++ ios objective-c mixing


【解决方案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 对象的引用(指针)。 this 在构造函数中用 this 创建

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

然后被调用

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

注意示例代码没有调用self,它调用了构造函数创建的实例playerObj

【讨论】:

  • 通过指向我想要的类 Otherclass*pointer= [[Otherclass alloc] init];
猜你喜欢
  • 2014-02-21
  • 1970-01-01
  • 2014-07-30
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多