2009-06-10 5 views
2

私は子クラスをその親クラスのプロパティとすべての関連するサブクラスにしたいと思う小さなクラス階層を持っています。基本的に、子クラスを関連する子クラスで使用する親クラスのプロパティとして宣言するにはどうすればよいですか?

  • 私はGroupClassの プロパティでAbstractClassを持っています。
  • GroupClassは、 AbstractClassの子である。
  • UsableObjectClassAbstractClassの子であり、 GroupClassを使用します。

私は、次の...

#import <Cocoa/Cocoa.h> 
#import "GroupingClass.h" // I've bounced this between @class as well. 
@interface myAbstractClass : NSObject { 
    GroupingClass* parentGroup; 
} 
@property (readwrite, assign) GroupingClass* parentGroup; 
@end 

#import "myAbstractClass.h" // ERROR LOCATION 
@implementation myAbstractClass 
@synthesize parentGroup; 
@end 

#import <Cocoa/Cocoa.h> 
@interface GroupingClass : myAbstractClass { 
} 
@end 

#import <Cocoa/Cocoa.h> // ERROR LOCATION IN ALL CHILD CLASSES OF AbstractClass 
@interface GroupingClass : myAbstractClass { 
} 
@end 

をすれば...私が指摘したエラー箇所でこのファンキー "Line Location GroupingClass.h:3: error: cannot find interface declaration for 'myAbstractClass', superclass of 'GroupingClass'" を得ます。

私はこれをうまく動作させるためにさまざまな方法を試しました(はい、私は上記が完全に間違っていることを知っています)、カテゴリとプロトコルは正しい方向に見えますが、正しい方向に押し込む必要があります。私は何かが根本的に根本的に欠けていると思う(率直に言って、私はこの質問をするのに少し恥ずかしい)。

私は現在REALbasicからこのアプリケーションを移植していますが、このようなものは簡単です。私はちょうど子クラスとしてプロパティを追加することができ、それはちょうど働いた。客観的なC ...そうではありません。

ヒントでも、何か助けていただければ幸いです。

答えて

2

ヘッダーに@class宣言を使用して、実装ファイルにサブクラスのヘッダーをインポートすることができます。

+0

それは私が行方不明だったビットだった。ありがとう! –

0

循環参照または依存関係と呼ばれるものがあります。基本クラスはその子クラスに依存し、基本クラスに依存します。

あなたのクラス構造を大きく再考することをお勧めします。

+0

しかし、これを管理する方法はまだあります。 UsableObjectClassは少なくともGroupingClassに適用されたことを知る必要があります。 GroupingClassのラッパークラスは私が投げた考えの1つでした。 –

+0

「なぜ」という質問が思い浮かぶ。 * UsableObjectClassにはGroupingClassへの参照が必要なのはなぜですか?*抽象基底クラスでコード化されたその参照はなぜ* *ですか?あなたの問題についてもっと知っていれば、私は別の構造を提案することができますが、あなたが持っているものは反パターンに従っているようです。 – Randolpho

+0

基本的に、GroupingClassは、カスタムインターフェイスでのオブジェクト選択を強化するために使用されます。グループプロパティは、オブジェクトが選択されたときにテストされます。オブジェクトがグループ化されている場合、そのグループはジャンプアウトポイントとして使用され、最上位の親グループを見つけて、関連するすべてのオブジェクトが選択されるようにします。私はそれを先に述べておくべきだったと思います。 –

2

あなたが探しているのは、 "フォワードクラス宣言"です。 AbstractClassヘッダの先頭に、これはGroupingClassと呼ばれるクラスが存在すること(残念ながらわずかに古風)Cコンパイラに指示し、それが適切にその型の変数のためのスペースを割り当てることができる

@class GroupingClass; 

加えます。

関連する問題