在另一个类中调用c函数

时间:2012-01-12 09:34:15

标签: objective-c xcode

我有目标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函数有关?

感谢。

2 个答案:

答案 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];
}