2012-01-12 140 views
1

我有客观的c类,我有一个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函数有关?

谢谢。

回答

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]; 
} 
+0

我不能做它作为一个客观的c函数,因为我需要传递它与数组的数组,我想在c中做到这一点。目标c NSArrays不能获取数字,所以我需要使用c函数。我的问题是:如何从另一个类调用C函数? – Curnelious 2012-01-12 09:50:40

+0

好吧。我把外部和我称之为showDigital(BinaryWord);那是行得通的。非常感谢。 – Curnelious 2012-01-12 09:52:57

+0

但现在我有另一个问题。让我们假设我有/必须使用C函数。然后当我计算出某些东西时,我需要将它传递给同一个类中另一个客观的c方法。我会怎么做? c函数中的所有数据都停留在那里?我不能使用C somethimes并将其数据传递给客观的c方法? – Curnelious 2012-01-12 10:06:43

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函数。

+0

不,我不能,它给了我错误。正如我所说我宣布C函数,并且C函数是:void和NOT - (void)。 – Curnelious 2012-01-12 09:42:37

+0

但您正在调用Objective-C方法。决定你想要哪一个并坚持下去。 – mattjgalloway 2012-01-12 09:44:10

+0

那么我将如何调用C函数?我的电话在这里是错误的。 – Curnelious 2012-01-12 09:47:00