1

タイルの構造体があります (すべてのプロパティは以前に定義された列挙型です)

typedef struct {
    ShapeType shape;
    ColorType color;
    PatternType pattern;
    IconType icon;
} TileDefinition;

そして、「ボード」用に 16 個のタイルを保持する別の構造体を作成したいと考えています。このようなもの:

typedef struct {
    TileDefinition[16]

} BoardDefinition;

そして、次のようにループできるようにしたいと思います。

for(int i=0;i<16;i++) {
    TileDefinition tileDef = boardDef[i];
    // Do something with tileDef
}

しかし明らかに、BoardDefinition 構造体のセットアップは機能していません。どうすれば設定できますか?ポインターを使用すべき場所と使用すべきでない場所はどこですか?

ありがとう

4

3 に答える 3

0

trojanfoe が示唆するように、これらは Objective-C オブジェクトとしてより優れていますが、何らかの理由でそうしない場合は. たとえば、いくつかのクラスで BoardDefinition 型のインスタンス変数を宣言したいと思うでしょう。

@interface MyClass : NSObject
{
    BoardDefinition    definition;
}

また、BoardDefinition が間違っています。次のようにする必要があります。

typedef struct {
    TileDefinition      boardDef[16];

} BoardDefinition;

あなたのループは次のようになります

for(int i=0;i<16;i++) {
    TileDefinition tileDef = definition.boardDef[i];
    // Do something with tileDef
}

次のような親構造体の TileDefinition に使用できるポインターを使用する必要はありません

typedef struct {
    TileDefinition    * tileDefinition;
    NSUInteger        count;
} BoardDefinition;

このようにして、可変数の TileDefinition を持つことができます。この場合、クラスの init メソッドに対して次のように tileDefinition を malloc する必要があります。

- (id)init
{
    if( (self = [super init]) != nil )
    {
        definition.count = 16;
        definition.tileDefinition = malloc( definition.count * sizeof(*definition.tileDefinition);
    }
    return self;
}
于 2013-05-17T07:49:01.753 に答える