Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 自指针,与C+一起使用+;来自目标C_Objective C_Syntax_Properties_Objective C++_Self - Fatal编程技术网

Objective c 自指针,与C+一起使用+;来自目标C

Objective c 自指针,与C+一起使用+;来自目标C,objective-c,syntax,properties,objective-c++,self,Objective C,Syntax,Properties,Objective C++,Self,我对self指针有点困惑。我知道如果我想在目标C中使用self,我需要将其作为参数传递,例如 someFunction(id self) { } 然而,我有点困惑的是,如果我想使用self的成员变量,我会得到以下错误 在类型为“\u strong id”的对象上找不到属性“browser” 我在头文件中将浏览器定义为: @property webBrowser* browser; 我试图在我的C++函数中调用我的WebBubor类函数: [self.browser StartSearch:

我对self指针有点困惑。我知道如果我想在目标C中使用self,我需要将其作为参数传递,例如

someFunction(id self)
{

}
然而,我有点困惑的是,如果我想使用self的成员变量,我会得到以下错误

在类型为“\u strong id”的对象上找不到属性“browser”

我在头文件中将浏览器定义为:

@property webBrowser* browser;
<>我试图在我的C++函数中调用我的WebBubor类函数:

[self.browser StartSearch:self];
错误发生在上面的行中。如果改为将self的成员变量作为参数传递,则该函数的调用肯定是正确的。不过这感觉有点不舒服


任何关于它为什么不起作用以及替代方案是什么的解释都很好。

您可以简单地指定参数类型,而不是使用通用的
id

void someFunction(MONObject * self) {
    [self.browser StartSearch:self];
}

或者如果你觉得你真的真的需要这种类型的删除(例如编译防火墙),你可以考虑改写:

// Some.mm
void someFunction(id self) {
    MONObject * object(self);
    [object.browser StartSearch:self];
}

为了在dot中使用属性语法,您需要向编译器提供确切的类型,例如通过将
id
指针强制转换为类的类型。如果不希望使用确切的类型或强制转换,请使用方法调用语法:

[[self browser] StartSearch:self];

按照惯例,Objective-C方法以小写字母开始,类以大写字母开始。遵循这些约定,代码变得更可读。我来自C++背景,所以我道歉。没有必要道歉,只是想帮助你。我也来自C++。这一个非常适合我的需要,但我确信另一个答案也是有效的。一般来说,使用正确的类型代替 ID>代码>是一个更好的实践,因为它既具体又允许编译器执行静态类型检查。