2010-04-21 12 views
8

tengo un HLRange estructura con dos de CGFloatCómo hacer que una máquina de estructura como CGRectMake (iPhone)

struct HOLRange 
{ 
CGFloat min; 
CGFloat max; 
}; 
typedef struct HOLRange HOLRange; 

pero ¿Cómo puedo hacer una función como HLRangeMake (1,2); .. como CGRectMake?

--EDIT--

mi archivo de cabecera

#import <Foundation/Foundation.h> 

struct HOLRange 
{ 
    CGFloat min; 
    CGFloat max; 
}; 
typedef struct HOLRange HOLRange; 

HOLRange HOLRangeMake(CGFloat min, CGFloat max) { 
    HOLRange range; 
    range.min = min; 
    range.max = max; 
    return range; 
} 

@interface Structs : NSObject { 

} 

@end 


error message: ld: duplicate symbol _HOLRangeMake in    /Users/Documents/projects/iphone/test/catalog/base1/build/base1.build/Debug-iphoneos/base1.build/Objects-normal/armv6/base1AppDelegate.o and /Users/Documents/projects/iphone/test/catalog/base1/build/base1.build/Debug-iphoneos/base1.build/Objects-normal/armv6/main.o 

Respuesta

16
HOLRange HLRangeMake(CGFloat min, CGFloat max) { 
    HOLRange range; 
    range.min = min; 
    range.max = max; 
    return range; 
} 
+0

Comando /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 fallado con el código de salida 1, si puedo añadir que el código –

+1

¿Qué hay mensaje de error del compilador? ¿Dónde exactamente pusiste ese código? Debe estar fuera de una implementación de clase. ¿Incluyó también una declaración de función correspondiente en el archivo de encabezado? por favor edite su pregunta y agregue más información. –

+0

lo he editado –

7

Se puede ver en la fuente CGRectMake CGGeometry.h para que pueda hacer lo mismo:

CG_INLINE CGRect 
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height) 
{ 
    CGRect rect; 
    rect.origin.x = x; rect.origin.y = y; 
    rect.size.width = width; rect.size.height = height; 
    return rect; 
} 

Editar: Debe definir su función como en línea o mover su implementación a un archivo .m. Obtendrá errores de vinculador a medida que su función se defina en cada unidad de compilación que importe el encabezado HoleRange.h (?).

5

Publicación anterior. Sin embargo, me gustaría compartir mi método para resolver este problema para futuros espectadores.

typdef struct _HOLRange { 
    CGFloat min; 
    CGFloat max; 
} HOLRange; 

static inline HOLRange(CGFloat min, CGFloat max) { 
    return (HOLRange) {min, max}; 
} 

Puede definir su stuct y hacer que funcione de esta manera. Corto y rápido.

2

Me gusta el formato de esto mejor. Tiene más sentido visual y parece más "correcto".

typedef struct { 
    CGFloat min; 
    CGFloat max; 
} HOLRange; 

static inline HOLRange HOLRangeMake(CGFloat min, CGFloat max) { 
    HOLRange range; 
    range.min = min; 
    range.max = max; 
    return range; 
} 
Cuestiones relacionadas