我有目标c类,我有一个C函数。 在那个C函数中我想调用另一个类中的另一个c函数。
在第一个C类函数中,我这样做:
HelloWorldLayer *ran;
ran=[[HelloWorldLayer alloc] init];
[ran showDigital:BinaryWord];
当HelloWorldLayer
是另一个具有C函数的类时:
void showDigital( int word[4])
并且它也在HelloWorldLayer.h
中声明。
在第一堂课中,当我试图调用另一个函数时,它说找不到showDigital函数。
是否与它的C函数有关?
感谢。
答案 0 :(得分:2)
您想调用C函数还是Objective-C方法?你的术语都混乱了。我想你想在HelloWorldLayer
上定义一个Objective-C方法并调用它,所以这就是你的标题应该是这样的:
HelloWorldLayer.h
@interface HelloWorldLayer : NSObject
- (void)sendDigital:(int[4])word;
@end
然后你可以通过做你已经尝试过的方法调用那个方法。
您无法在Objective-C类中声明C函数。您可以在@interface
块中定义它,但它不会是Objective-C类的一部分。只有Objective-C方法可以成为该类的一部分。
例如,如果你真的 真的希望你能做到:
HelloWorldLayer.h
@interface HelloWorldLayer : NSObject
void sendDigital(int[4] word);
@end
但是当你打电话给sendDigital
时,你必须这样做:
int word[4] = {1,2,3,4};
sendDigital(word);
你会注意到周围没有HelloWorldLayer
。现在你了解这里的区别吗?我确实认为你需要将你的方法定义为Objective-C方法而不是C函数。
答案 1 :(得分:1)
首先,C函数不是 在另一个类中,它只是与另一个类在同一个文件中。 Objective-C类的方法不是函数。
所以你可以从任何地方调用你的C函数,只要你有一个extern声明它。例如在HelloWorldLayer.h
extern void showDigital(int* word);
如果您确实希望该函数与您的类的实例相关联,则需要将其作为Objective-C方法。如果您愿意,可以将该方法作为原始函数的瘦包装:
-(void) showDigital: (int*) word
{
showDigital(word);
}
如果您想假装您的C函数是对象的一部分,则需要将接收器对象添加为参数。您仍然无法直接访问私有实例变量。
void showDigital(id self, int* word)
{
[self foobar];
}