2012-01-12 153 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