2010-04-21 15 views
8

mam HLRange struct z dwóch CGFloat naJak zrobić ekspres struct jak CGRectMake (iPhone)

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

ale jak mam zrobić funkcję jak HLRangeMake (1,2); .. jak CGRectMake?

--EDIT--

mój plik nagłówka

#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 

Odpowiedz

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

poleceń /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 nie powiodło się z kodem wyjścia 1, jeśli dodam, że kod –

+1

Co znajduje się komunikat o błędzie kompilatora za? Gdzie dokładnie umieściłeś ten kod? Musi być poza implementacją klasy. Czy w pliku nagłówkowym umieściłeś również odpowiednią deklarację funkcji? edytuj swoje pytanie i dodaj więcej informacji. –

+0

Edytowałem to –

7

Można zobaczyć źródło CGRectMake w CGGeometry.h więc można zrobić to samo:

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

Edycja: Musisz zdefiniować swoją funkcję jako wbudowaną lub przenieść jej implementację do pliku .m. Otrzymujesz błędy linkera, ponieważ funkcja jest definiowana w każdej jednostce kompilującej, która importuje nagłówek HoleRange.h (?).

5

Stary post. Chciałbym jednak udostępnić moją metodę rozwiązania tego problemu dla przyszłych widzów.

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

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

Możesz zdefiniować swój kształt i utworzyć funkcję w ten sposób. Krótki i szybki.

2

Podoba mi się ten format lepiej. Ma więcej sensu wizualnie i wydaje się bardziej "poprawny".

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; 
} 
Powiązane problemy