5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unknown type name 'ClassName' エラーの対処法

Posted at
Unknown type name ClassName

クラスが正しく定義されているにも関わらずこのエラーが出る場合は、
importで互いのクラスのヘッダファイルを参照しあっていることが原因かもしれません。

すなわち、2つのクラスClass1, Class2のヘッダファイルの冒頭が

Class1.h
#import "Class2.h"
Class2.h
#import "Class1.h"

のようになっている場合です。
これは循環参照(Class2.hを参照→Class1.hを参照→Class2.hを参照→…[以下無限])となるため、認められません。

回避するためには @class コンパイラディレクティブを使用します。上の例の場合は、

Class1.h
@class Class2;
Class1.m
#import "Class1.h"
#import "Class2.h"
Class2.h
@class Class1;
Class2.m
#import "Class1.h"
#import "Class2.h"

とします。
ここでは、@class コンパイラディレクティブによりClass1に対してClass2がクラスであることを知らせた上で、Class2のヘッダファイルはClass1の実装ファイルに対して直接インポートすることによって循環参照を回避しています。(Class2とClass1を逆にして考えた場合ももちろん同様です。)
Class1.hまたはClass2.hの片方でのみ @class コンパイラディレクティブを使用しても循環参照は回避できるため、同様の効果が得られます。

参照

http://iphone-dev.doorblog.jp/archives/5550337.html
まんまパクリです。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?