2009-03-10 9 views
2
私は2次元配列..しかし、私のコードのdoesnの `tの仕事を初期化したい

Objective-Cのセッター2Dアレイ

誰かが間違っているものを私に伝えることができますか?

おかげ クリス

@interface Map : NSObject { 
    int mapData[8][8]; 
} 
@property(readwrite) int** mapData; 
@end 


@implementation Map 
@synthesize **mapData; (Error: Syntax before *) 

- (id)initWithMap:(int[8][8])map { 

    for (int i=0; i<8; i++) { 
     for (int j=0; j<8; j++) { 
      self.mapData[i][j] = map[i][j]; 
     } 
    } 
    return self; 
} 

@end 

(Warning mapData requires method... use @synthesize or.......) 

編集:提案として、私はのsynthesizeでタイプを削除した場合、コンパイラは私に別のエラーを通知します:プロパティ地図データのエラータイプはIVAR地図データ

編集のタイプと一致していません#2:誰かが修正コードを投稿してください。これは本当にばかげた問題で1時間以上働いています。(C/C++の背景はありませんが、Javaはありません)

答えて

2

を表示少し書き換え

配列型のプロパティを持ちます。代わりにゲッター/セッターを使用できますか?たとえば:

@interface Map : NSObject { 
    int mapData[8][8]; 
} 
- (int)getI:(int)i j:(int)j; 
- (int)setI:(int)i j:(int)j to:(int)v; 
@end 


@implementation Map 

- (id)initWithMap:(int[8][8])map { 

    for (int i=0; i<8; i++) { 
     for (int j=0; j<8; j++) { 
      mapData[i][j] = map[i][j]; 
     } 
    } 
    return self; 
} 

- (int)getI:(int)i j:(int)j { 
    return mapData[i][j]; 
} 

- (void)setI:(int)j j:(int)j toValue:(int)v { 
    mapData[i][j] = v; 
} 

@end 
0

プロパティのsynthesizeステートメントは、型名を指定する必要はありません。

So;

@synthesize mapData; 

また、mapDataはインスタンス変数であるため、「self.mapData」構文を使用する必要はありません。あなただけでもやることができます。

mapData[i][j] = map[i][j]; 

最後に、これらは単なるデータブロックなので、すべてを1つのコピーでコピーできることに気付きます。例えば

// could also be sizeof(mapData) but this is more instructive 
memcpy(mapData, map, sizeof(int) * 8 * 8); 
+0

大丈夫、私は今、彼らは情報を入力する削除... は今、私はエラーを取得:プロパティ地図データのエラータイプは、私が最初の事をしたいと思います地図データ – chrisx

4

int mapData[8][8]; 

int **mapData; 

異なって解釈されます。最初は64個の連続したintを持つ配列で、もう1つはintへのポインタへのポインタです。私はあなたができるとは思わないかもしれない、これは構造体の2次元配列をラップ、あなたのために働くことができます...

struct map_s { 
    int map[8][8]; 
}; 
typedef struct map_s map_t; 

@interface Map : NSObject { 
    map_t mapData; 
} 
@property (nonatomic, readwrite) map_t mapData; 
@end 


@implementation Map 
@synthesize mapData; 

- (id)initWithMap:(map_t)map { 
    int i, j; 
    for (i=0; i<8; i++) { 
    for (j=0; j<8; j++) { 
     self.mapData.map[i][j] = map.map[i][j]; 
    } 
    } 
    return self; 
} 

@end 

マップ初期化子

struct map_s { 
    int map[8][8]; 
}; 
typedef struct map_s map_t; 

@interface Map : NSObject { 
    map_t mapData; 
} 
@property (nonatomic, readwrite) map_t mapData; 
- (void)init; 
- (id)initWithMap:(map_t)map; 
@end 


@implementation Map 
@synthesize mapData; 

- (void)init 
{ 
    map_t first = { 
    { 
     { 0,0,0,0,0,0,0,0 }, 
     { 0,0,0,0,0,0,0,0 }, 
     { 0,0,0,0,0,0,0,0 }, 
     { 0,0,0,0,0,0,0,0 }, 
     { 0,0,0,0,0,0,0,0 }, 
     { 0,0,0,0,0,0,0,0 }, 
     { 0,0,0,0,0,0,0,0 }, 
     { 0,0,0,0,0,0,0,0 } 
    } 
    }; 
    [self initWithMap:first]; 
} 

- (id)initWithMap:(map_t)map { 
    mapData = map; 
    return self; 
} 

@end 
+0

IVARのタイプと一致していません。..ありませんポインタベクトル..私はIDを変更するために何をしなければならないのですか? – chrisx

+0

と私はどのようにmap_t intを定義するでしょうか? \t map_t最初= { \t \t {0,0,0,0,0,0,0,0}、 \t \t {0,0,0,0,0,0,0,0}、 \t \t {0,0,0,0,0,0,0,0}、 \t \t {0,0,0,0,0,0,0,0}、 \t \t {0,0,0、 0,0,0,0,0}、 \t \t {0,0,0,0,0,0,0,0}、 \t \t {0,0,0,0,0,0,0、 0}、 \t \t {0,0,0,0,0,0,0,0} \t} エラーのハントレを投げます:-( – chrisx

+0

エラーは何を言いますか?どんなエラーですか?それはここでうまくいくからです... – epatel

関連する問題