単一の C スタイル関数を含む .h ファイルがあります。
void myFunc(NSArray *array) {
...
}
この関数をすべてのファイルで使用できるようにしたいので#import "Functions.h"
、App-Prefix.pch ファイルに移動します。
ただし、これによりコンパイルエラーが発生しますld: 38 duplicate symbols for architecture i386
。これを行う適切な方法は何ですか?
単一の C スタイル関数を含む .h ファイルがあります。
void myFunc(NSArray *array) {
...
}
この関数をすべてのファイルで使用できるようにしたいので#import "Functions.h"
、App-Prefix.pch ファイルに移動します。
ただし、これによりコンパイルエラーが発生しますld: 38 duplicate symbols for architecture i386
。これを行う適切な方法は何ですか?
ヘッダー ファイルに Objective-C メソッドを実装しないように、実際の C 関数本体をヘッダー ファイルに実装しないでください。
myfunc.h
void myFunc(NSArray *array);
myfunc.m
void myFunc(NSArray *array) {
...
}
#ifndef
明らかに、ヘッダーの先頭にa も追加する必要があります。 で Objective-C を使用しないことにしたmyfunc.m
場合は、名前を に変更することもできますmyfunc.c
。
更新:
これは、ヘッダー ファイルがプログラムの複数のエントリ ポイント (複数のファイル) 内から収集されるためです。次に、コンパイラは少しめまいを起こし、実際にどの関数本体を呼び出したいのか疑問に思い始めます (複数あるため)。より明白な例は、1 つの C ファイルで同じ関数名を 2 回宣言することです。最後に、ヘッダー ファイルを使用して関数を「記述」し (ドキュメントなどを追加)、メイン (.m) または C ファイル (.c) を使用して、その関数が呼び出されたときに何をすべきかをコンパイラに指示する必要があります。 .