2010-04-21 3 views
8

j'ai un HLRange struct avec deuxComment faire un fabricant struct comme CGRectMake (iphone)

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

mais comment puis-je faire une fonction comme HLRangeMake (1,2); .. comme CGRectMake?

--EDIT--

mon fichier d'en-tête

#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 

Répondre

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

Commande /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 échoué avec le code de sortie 1, si j'ajoute que le code –

+1

Quel est le message d'erreur du compilateur? Où exactement avez-vous mis ce code? Il doit être en dehors d'une implémentation de classe. Avez-vous également inclus une déclaration de fonction correspondante dans le fichier d'en-tête? s'il vous plaît modifier votre question et ajouter plus d'informations. –

+0

Je l'ai édité –

7

Vous pouvez voir la source CGRectMake dans CGGeometry.h de sorte que vous pouvez faire la même chose:

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; 
} 

Edit: Vous devez définir votre fonction en ligne ou déplacer son implémentation vers le fichier .m. Vous obtenez des erreurs de liens lorsque votre fonction est définie dans chaque unité de compilation qui importe l'en-tête HoleRange.h (?).

5

Ancien poste. Cependant, j'aimerais partager ma méthode de résolution de ce problème pour les futurs spectateurs.

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

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

Vous pouvez définir votre stuct et Make comme ceci. Court et rapide.

2

J'aime mieux le format de ceci. Cela a plus de sens visuellement et semble plus "correct".

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; 
} 
Questions connexes