Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 包含目标C中结构数组的结构_Objective C_Struct_Typedef - Fatal编程技术网

Objective c 包含目标C中结构数组的结构

Objective c 包含目标C中结构数组的结构,objective-c,struct,typedef,Objective C,Struct,Typedef,我有一个磁贴的结构(所有属性都是以前定义的枚举) 我想为一个“板”创建另一个包含16个瓷砖的结构。大概是这样的: typedef struct { TileDefinition[16] } BoardDefinition; 然后我希望能够循环,就像这样: for(int i=0;i<16;i++) { TileDefinition tileDef = boardDef[i]; // Do something with tileDef } for(int i=0

我有一个磁贴的结构(所有属性都是以前定义的枚举)

我想为一个“板”创建另一个包含16个瓷砖的结构。大概是这样的:

typedef struct {
    TileDefinition[16]

} BoardDefinition;
然后我希望能够循环,就像这样:

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

for(int i=0;i选项1:使
BoardDefinition
成为一个Objective-C对象,可以在
init
方法中进行设置

选项2:使用(目标-)C++并为
struct BoardDefinition
提供构造函数


选项3:保留C并提供一个
initBoardDefinition(BoardDefinition*boardDef);
函数。

选项1:使
BoardDefinition
成为一个Objective-C对象,可以在
init
方法中进行设置

选项2:使用(目标-)C++并为
struct BoardDefinition
提供构造函数


选项3:使用C并提供一个
initBoardDefinition(BoardDefinition*boardDef);
函数。

正如特洛伊木马程序所建议的,这些对象作为Objective-C对象会更好,但如果出于某种原因,您不愿意这样做。 例如,您可能希望在某个类中声明BoardDefinition类型的实例变量

@interface MyClass : NSObject
{
    BoardDefinition    definition;
}
而且你的定义是错误的,应该是这样的

typedef struct {
    TileDefinition      boardDef[16];

} BoardDefinition;
for(int i=0;i<16;i++) {
    TileDefinition tileDef = definition.boardDef[i];
    // Do something with tileDef
}
typedef struct {
    TileDefinition    * tileDefinition;
    NSUInteger        count;
} BoardDefinition;
然后,您的循环将类似于

typedef struct {
    TileDefinition      boardDef[16];

} BoardDefinition;
for(int i=0;i<16;i++) {
    TileDefinition tileDef = definition.boardDef[i];
    // Do something with tileDef
}
typedef struct {
    TileDefinition    * tileDefinition;
    NSUInteger        count;
} BoardDefinition;
通过这种方式,您可以拥有数量可变的TileDefinition

- (id)init
{
    if( (self = [super init]) != nil )
    {
        definition.count = 16;
        definition.tileDefinition = malloc( definition.count * sizeof(*definition.tileDefinition);
    }
    return self;
}

正如trojanfoe所建议的,这些作为Objective-C对象会更好,但如果出于某种原因,您不愿意这样做。 例如,您可能希望在某个类中声明BoardDefinition类型的实例变量

@interface MyClass : NSObject
{
    BoardDefinition    definition;
}
而且你的定义是错误的,应该是这样的

typedef struct {
    TileDefinition      boardDef[16];

} BoardDefinition;
for(int i=0;i<16;i++) {
    TileDefinition tileDef = definition.boardDef[i];
    // Do something with tileDef
}
typedef struct {
    TileDefinition    * tileDefinition;
    NSUInteger        count;
} BoardDefinition;
然后,您的循环将类似于

typedef struct {
    TileDefinition      boardDef[16];

} BoardDefinition;
for(int i=0;i<16;i++) {
    TileDefinition tileDef = definition.boardDef[i];
    // Do something with tileDef
}
typedef struct {
    TileDefinition    * tileDefinition;
    NSUInteger        count;
} BoardDefinition;
通过这种方式,您可以拥有数量可变的TileDefinition

- (id)init
{
    if( (self = [super init]) != nil )
    {
        definition.count = 16;
        definition.tileDefinition = malloc( definition.count * sizeof(*definition.tileDefinition);
    }
    return self;
}

这实际上是一个C问题

这个位子很好:

typedef struct {
    ShapeType shape;
    ColorType color;
    PatternType pattern;
    IconType icon;
} TileDefinition;
在这里,您需要将
BoardDefinition
声明为:

enum { BoardDefinition_NTiles = 16 }; // << declare a constant for your ease of use
typedef struct {
    TileDefinition tile[BoardDefinition_NTiles];
} BoardDefinition;

enum{BoardDefinition\NTiles=16};//这实际上是一个C问题

这个位子很好:

typedef struct {
    ShapeType shape;
    ColorType color;
    PatternType pattern;
    IconType icon;
} TileDefinition;
在这里,您需要将
BoardDefinition
声明为:

enum { BoardDefinition_NTiles = 16 }; // << declare a constant for your ease of use
typedef struct {
    TileDefinition tile[BoardDefinition_NTiles];
} BoardDefinition;

enum{BoardDefinition\u NTiles=16};//
struct{TileDefinition[16]}
在我看来真的很奇怪。
struct{TileDefinition tiles[16];}
然后使用
BoardDefinition.tiles[i]
struct{TileDefinition[16]
在我看来真的很奇怪。
struct有什么问题吗{TileDefinition tiles[16];}
然后使用
boardDef.tiles[i]
?“这些作为Objective-C对象会更好”--为什么?好吧,不要把这个问题当真--我只是想指出,鉴于OP中的信息/问题,将类型转换为ObjC没有明显的原因/好处。我将通过游戏中心将这些内容发送给其他玩家,并希望尽可能使它们保持轻量级“这些作为Objective-C对象会更好”--为什么?好吧,不要把这个问题当真--我只是想指出,鉴于OP中的信息/问题,将类型转换为ObjC没有明显的原因/好处。我将通过Game Center将它们发送给其他玩家,并希望它们尽可能轻量