2012-01-12 14 views
1

私はそれにCの関数を持っている目的のcクラスを持っています。 そのC関数では、別のクラスの別のc関数を呼び出す必要があります。ファーストクラスのC関数の別のクラスのc関数を呼び出す

、私はこれを行う:

HelloWorldLayer *ran; 
    ran=[[HelloWorldLayer alloc] init]; 
    [ran showDigital:BinaryWord]; 

HelloWorldLayerは、C言語の関数持つ他のクラス、次のとおりです。

void showDigital(int word[4])

をし、それが中にも宣言。

ファーストクラスでは、他の関数を呼び出すときにshowDigital関数が見つからないと表示されます。

というのは、そのCの機能と関係がありますか?

ありがとうございました。

答えて

1

まず、C関数はの中でではなく、他のクラスと同じファイル内にあるだけです。 Objective-Cクラスには、関数ではないメソッドがあります。

したがって、extern宣言がある場合はどこからでもC関数を呼び出すことができます。例えばHelloWorldLayer.h

extern void showDigital(int* word); 

にあなたが本当に機能があなたのクラスのインスタンスに関連付けられていることがしたい場合は、それObjective-Cのメソッドにする必要があります。あなたが好きなら、そのメソッドは、元の関数の薄いラッパーも持つことができます:あなたはCの関数はオブジェクトの一部であることをふりをしたい場合は、とレシーバ・オブジェクトを追加する必要があります

-(void) showDigital: (int*) word 
{ 
    showDigital(word); 
} 

パラメータ。しかし、まだプライベートインスタンス変数に直接アクセスすることはできません。

void showDigital(id self, int* word) 
{ 
    [self foobar]; 
} 
+0

私は数値を持つ配列を渡す必要があり、それをcで実行したいので、目的関数として実行できません。客観的なc NSArraysは番号を取得できないので、私はc関数で作業する必要があります。私の質問は:どのように私は、C関数、別のクラスから呼び出すだろうか? – Curnelious

+0

それを得ました。私はexternを置いて、私はshowDigital(BinaryWord)でそれを呼び出します。それが動作します。どうもありがとう。 – Curnelious

+0

しかし、今私は別の問題があります。私はC関数を使用しなければならないと仮定します。そこに何かを計算すると、同じクラスの別の目的のメソッドに渡す必要があります。どうすればいい? c関数内のすべてのデータはそこにとどまりますか?私はCのsomethimesを使用し、客観的な方法にそのデータを渡すことはできません? – Curnelious

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メソッドだけがクラスの一部になることができます。

@interface HelloWorldLayer : NSObject 

void sendDigital(int[4] word); 

@end 

HelloWorldLayer.h

しかし、あなたは sendDigitalを呼び出したとき、あなたはこのようにそれを行う必要があるだろう:あなたは本当に が本当に 本当にあなたができるたかった場合例えばので

int word[4] = {1,2,3,4}; 
sendDigital(word); 

また、HelloWorldLayerはまったくありません。今ここの違いを理解していますか?私は実際にあなたのメソッドをCの関数ではなくObjective-Cのメソッドとして定義する必要があると思います。

+0

いいえ、間違いです。私はC関数を宣言していると言っていますが、C関数は:void、NOT - (void)です。 – Curnelious

+0

しかしObjective-Cメソッドを呼び出しています。あなたが望むものを決めてそれに固執する。 – mattjgalloway

+0

私はC関数をどのように呼び出すでしょうか?私の呼び出しはここで間違っています。 – Curnelious

関連する問題