And*_*obs 8 iphone struct typedef makefile objective-c
我有一个带有两个CGFloat的结构HLRange
struct HOLRange
{
CGFloat min;
CGFloat max;
};
typedef struct HOLRange HOLRange;
Run Code Online (Sandbox Code Playgroud)
但我如何制作像HLRangeMake(1,2)这样的函数; ..喜欢CGRectMake?
- 编辑 -
我的头文件
#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
Run Code Online (Sandbox Code Playgroud)
Ole*_*ann 16
HOLRange HLRangeMake(CGFloat min, CGFloat max) {
HOLRange range;
range.min = min;
range.max = max;
return range;
}
Run Code Online (Sandbox Code Playgroud)
您可以在CGGeometry.h中看到CGRectMake源代码,因此您可以执行相同的操作:
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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:您必须将函数定义为内联或将其实现移动到.m文件.当您在导入HoleRange.h(?)标头的每个编译单元中定义函数时,您将收到链接器错误.
老帖子.但是,我想与未来的观众分享我解决这个问题的方法.
typdef struct _HOLRange {
CGFloat min;
CGFloat max;
} HOLRange;
static inline HOLRange(CGFloat min, CGFloat max) {
return (HOLRange) {min, max};
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样定义你的stuct和Make函数.简短快捷.
| 归档时间: |
|
| 查看次数: |
4038 次 |
| 最近记录: |