error: Use of undeclared identifier 'self' c++-objective c mixing
error: Use of undeclared identifier 'self' c++-objective c mixing
我目前正在使用 ue4 完成 iOS 的游戏。我正在使用一些特定的 iOS 代码并尝试使用 'self' 变量
调用方法
void Aaccessactorios::Shareoption() {
[self Sharebutton];//ios
}
代码在预处理程序标签#if PLATFORM_IOS 和#endif
中
我想我已经在我的 cpp 文件的开头声明了 self 变量:
-(id)init
{
self = [super init];
return self;
}
其他论坛提到 Unreal engine 在最后编译所有 cpp .mm,所以我认为这不是问题所在。
self 变量在 objective c 部分周围使用,因此它对我的代码至关重要。如何正确混合代码并声明我的 self 变量?
谢谢
编辑:这是我尝试重新创建的部分 https://answers.unrealengine.com/questions/422323/callback-from-objective-c-back-to-the-c-layer.html
我一直混合使用 C++ 和 Obj-C。 Obj-C class 实例与 C++ 实例不同。 C++ class 实例有 this
。没有self
。 Obj-C class 实例有 self
。您可以在这里阅读更多相关信息:
Difference b/w Objective C's self and C++'s this?
根据您所写的假设,您有一个 C++ class Aaccessactorios
。不清楚是谁定义了Sharebutton
。如果它在 C++ class 中,那么您可以将其称为
this->Sharebutton();
或者干脆
Sharebutton();
如果 Sharebutton
属于一个 Obj-C class,那么你需要让 C++ 有一个指向 Obj-C class 实例的指针,或者让它通过进入功能。后者的一个例子是:
void Aaccessactorios::Shareoption(ObjCClassObj *obj) {
[obj Sharebutton];//ios
}
在该代码参考 link 中,您可以看到他们实际上是在做前者。
class IOSMediaPlayerController
{
public:
IOSMediaPlayerController();
~IOSMediaPlayerController();
void startPlayback();
void stopPlayback();
void callbackFunc();
#if PLATFORM_IOS
IOSMediaPlayerControllerObj *playerObj;
#endif
};
这里可以看到playerObj
是对Obj-C对象的引用(指针)。这在构造函数中使用 this
创建
IOSMediaPlayerController::IOSMediaPlayerController()
{
#if PLATFORM_IOS
playerObj = [[IOSMediaPlayerControllerObj alloc] init];
#endif
}
然后被
调用
void IOSMediaPlayerController::startPlayback()
{
#if PLATFORM_IOS
[playerObj startPlayback];
#endif
}
注意示例代码不调用self
,它调用构造函数创建的实例playerObj
。
我目前正在使用 ue4 完成 iOS 的游戏。我正在使用一些特定的 iOS 代码并尝试使用 'self' 变量
调用方法void Aaccessactorios::Shareoption() {
[self Sharebutton];//ios
}
代码在预处理程序标签#if PLATFORM_IOS 和#endif
中我想我已经在我的 cpp 文件的开头声明了 self 变量:
-(id)init
{
self = [super init];
return self;
}
其他论坛提到 Unreal engine 在最后编译所有 cpp .mm,所以我认为这不是问题所在。
self 变量在 objective c 部分周围使用,因此它对我的代码至关重要。如何正确混合代码并声明我的 self 变量?
谢谢
编辑:这是我尝试重新创建的部分 https://answers.unrealengine.com/questions/422323/callback-from-objective-c-back-to-the-c-layer.html
我一直混合使用 C++ 和 Obj-C。 Obj-C class 实例与 C++ 实例不同。 C++ class 实例有 this
。没有self
。 Obj-C class 实例有 self
。您可以在这里阅读更多相关信息:
Difference b/w Objective C's self and C++'s this?
根据您所写的假设,您有一个 C++ class Aaccessactorios
。不清楚是谁定义了Sharebutton
。如果它在 C++ class 中,那么您可以将其称为
this->Sharebutton();
或者干脆
Sharebutton();
如果 Sharebutton
属于一个 Obj-C class,那么你需要让 C++ 有一个指向 Obj-C class 实例的指针,或者让它通过进入功能。后者的一个例子是:
void Aaccessactorios::Shareoption(ObjCClassObj *obj) {
[obj Sharebutton];//ios
}
在该代码参考 link 中,您可以看到他们实际上是在做前者。
class IOSMediaPlayerController
{
public:
IOSMediaPlayerController();
~IOSMediaPlayerController();
void startPlayback();
void stopPlayback();
void callbackFunc();
#if PLATFORM_IOS
IOSMediaPlayerControllerObj *playerObj;
#endif
};
这里可以看到playerObj
是对Obj-C对象的引用(指针)。这在构造函数中使用 this
IOSMediaPlayerController::IOSMediaPlayerController()
{
#if PLATFORM_IOS
playerObj = [[IOSMediaPlayerControllerObj alloc] init];
#endif
}
然后被
调用 void IOSMediaPlayerController::startPlayback()
{
#if PLATFORM_IOS
[playerObj startPlayback];
#endif
}
注意示例代码不调用self
,它调用构造函数创建的实例playerObj
。