2010-04-21 30 views
8

tôi có một HLRange struct với hai CGFloat củaLàm thế nào để làm cho một nhà sản xuất struct như CGRectMake (iphone)

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

nhưng làm thế nào để tôi làm cho một chức năng như HLRangeMake (1,2); .. như CGRectMake?

--EDIT--

tập tin tiêu đề của tôi

#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 

Trả lời

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

lệnh /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 thất bại với mã exit 1, nếu tôi thêm rằng mã –

+1

thông báo lỗi của trình biên dịch là gì? Bạn đã đặt mã đó ở đâu? Nó phải ở bên ngoài một lớp thực hiện. Bạn cũng bao gồm khai báo hàm tương ứng trong tệp tiêu đề? vui lòng chỉnh sửa câu hỏi của bạn và thêm thông tin khác. –

+0

tôi đã chỉnh sửa nó –

7

Bạn có thể thấy nguồn CGRectMake trong CGGeometry.h vì vậy bạn có thể làm tương tự:

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

Chỉnh sửa: Bạn phải xác định hàm của bạn dưới dạng nội dòng hoặc di chuyển tệp thực thi của nó thành tệp .m. Bạn đang nhận được các lỗi liên kết khi bạn trở thành hàm được định nghĩa trong mọi đơn vị biên dịch nhập tiêu đề HoleRange.h (?).

5

Bài đăng cũ. Tuy nhiên, tôi muốn chia sẻ phương pháp giải quyết vấn đề này cho người xem trong tương lai.

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

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

Bạn có thể xác định đường ống và tạo chức năng như thế này. Ngắn và nhanh.

2

Tôi thích định dạng này tốt hơn. Nó có ý nghĩa trực quan hơn và có vẻ "đúng" hơn.

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; 
} 
Các vấn đề liên quan