2009-03-10 31 views
2
i 2d diziyi .. ama benim kod `nın çalışmalarını başlatmak isteyen

,Amaç-c ayarlayıcı 2d-dizi

birileri yanlış ne olduğunu bana söyleyebilir?

Teşekkür Chris

@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.......) 

Düzenleme: önerildiği gibi i sentezleneceği en türünü kaldırırsanız, derleyici bana başka gruplara bölmeye: mülkiyetin hata tipi mapData ivar mapData

Düzenleme tipini eşleşmiyor # 2: Birisi lütfen düzeltilmiş kodu gönderebilir mi? Bu gerçekten aptalca problemi bir saatten fazla çalışıyorum .. (hayır c/C++ arka plan, ancak java)

cevap

2

elimden seni düşünmüyorum harita başlatıcısı göstermek için küçük yeniden yapıldı ... Bir yapı içinde 2d dizi sarma, sizin için çalışabilir dizi türlerinin özelliklerine sahip olur. Bunun yerine sadece bir alıcı/setter kullanabilir misiniz? Örneğin:

şimdi hata alıyorum
@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

Bir mülkün sentezleme ifadesinin türü belirtmesi gerekmiyor, sadece ad.

So;

@synthesize mapData; 

Ayrıca mapData siz "self.mapData" sözdizimini kullanmak gerekmez bir örnek değişkendir çünkü. Sadece yapabilirsin;

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

Son olarak, bunların yalnızca veri blokları olduğunu anlayın, böylece her şeyi tek seferde kopyalayabilirsiniz. Örn

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

tamam ben şimdi .. onlar bilgileri yazın kaldırıldı: mülkiyetin hata tipi mapData .. ben ilk şey istiyorum düşünüyorum ivar mapData – chrisx

4

da

int mapData[8][8]; 

ve

int **mapData; 

farklı yorumlanmaktadır. Birincisi, ardışık 64 initli bir dizi ve diğeri de int için bir göstericinin işaretçisi olacaktır.

Belki bu

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

tipini değil uymuyor işaretçi vektör .. id değiştirmek için ne yapmalıyım? – chrisx

+0

ve bir map_t int kodunu nasıl tanımlarım? \t map_t birinci = { \t \t {0,0,0,0,0,0,0,0} \t \t {0,0,0,0,0,0,0,0} \t \t {0,01,0,0,0,0,0}, \t \t {0,0,0,0,0,0,0}, \t \t {0,0,0, 0,01,0,0,0}, \t \t {0,0.0,0,0,0,0}, \t \t {0,0,0,0,0,0,0, 0}, \t \t \t} hataların hundretsini atar :-( – chrisx

+0

Hatalar ne diyor? herhangi bir hata öncesi? çünkü bu iyi çalışıyor ... – epatel

İlgili konular