Objective-C中,分类的问题

czclk 2012-11-03 10:43:25
最近在学习OC,遇到了一些问题,想问高手如何解决。


------------以下是Fraction.h文件内容------------------
#import <Foundation/Foundation.h>

@interface Fraction : NSObject
-(void) print;
-(double) convertToNum;
-(void) setTo: (int)n Over:(int)d;
-(void) reduce;
@property int numerator, denominator;
@end

------------以下是Fraction.m文件内容------------------
#import "Fraction.h"
@implementation Fraction
{
}
@synthesize numerator, denominator;
-(Fraction *)initWith:(int)n over:(int)d{
//具体实现省略
}
-(void) reduce{
//具体实现省略
}
-(void) print{
//具体实现省略
}
-(double) convertToNum{
//具体实现省略
}
-(void) setTo:(int)n Over:(int)d{
//具体实现省略
}
@end

-------------以下是Fraction+Ops.h的内容-------------
#import "Fraction.h"

@interface Fraction (MathOps)
-(Fraction *)add:(Fraction *)f;
-(Fraction *)mul:(Fraction *)f;
-(Fraction *)sub:(Fraction *)f;
-(Fraction *)div:(Fraction *)f;
@end

----------以下是Fraction+Ops.m的内容-------------
#import "Fraction+MathOps.h"
#import "Fraction.m"

@implementation Fraction (MathOps)
-(Fraction *) add:(Fraction *)f{
//具体实现省略
}
-(Fraction *)sub:(Fraction *)f{
//具体实现省略
}
-(Fraction *)mul:(Fraction *)f{
//具体实现省略
}
-(Fraction *)div:(Fraction *)f{
//具体实现省略
}
@end


现在的问题是,已经确定实现的代码没有错误,但是编译的时候,提示编译失败。错误信息如下:
Ld /Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Products/Debug/HelloWorld normal x86_64
cd /Users/czclk/Desktop/HelloWorld/HelloWorld
setenv MACOSX_DEPLOYMENT_TARGET 10.8
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -L/Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Products/Debug -F/Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Products/Debug -filelist /Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Intermediates/HelloWorld.build/Debug/HelloWorld.build/Objects-normal/x86_64/HelloWorld.LinkFileList -mmacosx-version-min=10.8 -fobjc-arc -framework Foundation -o /Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Products/Debug/HelloWorld

duplicate symbol _OBJC_IVAR_$_Fraction.numerator in:
/Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Intermediates/HelloWorld.build/Debug/HelloWorld.build/Objects-normal/x86_64/Fraction.o
/Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Intermediates/HelloWorld.build/Debug/HelloWorld.build/Objects-normal/x86_64/Fraction+MathOps.o
duplicate symbol _OBJC_IVAR_$_Fraction.denominator in:
/Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Intermediates/HelloWorld.build/Debug/HelloWorld.build/Objects-normal/x86_64/Fraction.o
/Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Intermediates/HelloWorld.build/Debug/HelloWorld.build/Objects-normal/x86_64/Fraction+MathOps.o
duplicate symbol _OBJC_CLASS_$_Fraction in:
/Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Intermediates/HelloWorld.build/Debug/HelloWorld.build/Objects-normal/x86_64/Fraction.o
/Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Intermediates/HelloWorld.build/Debug/HelloWorld.build/Objects-normal/x86_64/Fraction+MathOps.o
duplicate symbol _OBJC_METACLASS_$_Fraction in:
/Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Intermediates/HelloWorld.build/Debug/HelloWorld.build/Objects-normal/x86_64/Fraction.o
/Users/czclk/Library/Developer/Xcode/DerivedData/HelloWorld-bptlkzckpfrvvkdgxolkkdxzrthb/Build/Intermediates/HelloWorld.build/Debug/HelloWorld.build/Objects-normal/x86_64/Fraction+MathOps.o
ld: 4 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

请问高手如何解决,问题出在哪儿了呢?谢谢!!!!
...全文
3208 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sowalee 2014-02-28
  • 打赏
  • 举报
回复
也在上面的例子中碰到一个问题。我把分类的interface文件内容放到主类的interface文件,把分类的实现文件内容放到主类实现文件中,能正常运行。但把主类、分类的接口文件、实现分开成四个文件存放,就出问题了,请问是怎么回事?
hy31--- 2013-12-10
  • 打赏
  • 举报
回复
#import 问题啊,大哥==怎么把头文件加到源文件里去了
ReyZhang 2013-10-30
  • 打赏
  • 举报
回复
尝试在build settings 中找到 other linker flags 添加 -ObjC 和 -all_load 然后再重新build your project.
mahong1237 2013-10-29
  • 打赏
  • 举报
回复
#import有问题。。。
river80 2013-09-05
  • 打赏
  • 举报
回复
好好的学一下语法,随便拿本书,照着写个类有这么复杂吗?
董卓打酱油 2013-09-05
  • 打赏
  • 举报
回复
楼主啊,楼主,我特么终于清楚了, //Fraction类 @interface Fraction : NSObject { int numerator,denominator;//就是这一步~~~~写完就ok了~~~ } @property int numerator,denominator; -(void) print; -(void) setTo: (int) n over: (int) d; -(double) convertToNum; -(void) reduce; @end
RannieR 2013-09-04
  • 打赏
  • 举报
回复
这个帖子还是挺欢乐的- -
董卓打酱油 2013-09-04
  • 打赏
  • 举报
回复
我也碰到这个问题了,不知LZ解决了没有关键是不import Fraction.m的话里面在Fraction接口声明的实例无法引用啊????
han5222201286 2012-11-15
  • 打赏
  • 举报
回复
等待高人的出现来解答
wade0595 2012-11-09
  • 打赏
  • 举报
回复
我觉得 缺少库,,,, add需要的framworks
slb1992006 2012-11-09
  • 打赏
  • 举报
回复
引用 3 楼 czclk 的回复:
引用 2 楼 yiyaaixuexi 的回复:问题出在: #import "Fraction.m" 请不要import .m 如果不import的话,我在Fraction+MathOps.m里无法引用类Fraction里的属性或者方法,这可怎么办呢?
你可以把Fraction里面你要引用的东西都定义到.h里面,引用.h文件,很少见引用.m文件的
cc陈(Skylar) 2012-11-09
  • 打赏
  • 举报
回复
问题出在: #import "Fraction.m",不能引入m文件,要用的话,引用该类头文件,BaseController *temp = [[BaseController alloc]method:@""];
Snake_Jay 2012-11-08
  • 打赏
  • 举报
回复
引用 6 楼 yiyaaixuexi 的回复:
引用 5 楼 czclk 的回复:求高人解答!!!谢谢 ?你试过了么
嗯,你试过了么?
pro_xk 2012-11-08
  • 打赏
  • 举报
回复
借宝地做做任务
念茜 2012-11-06
  • 打赏
  • 举报
回复
引用 5 楼 czclk 的回复:
求高人解答!!!谢谢
?你试过了么
czclk 2012-11-06
  • 打赏
  • 举报
回复
求高人解答!!!谢谢
念茜 2012-11-06
  • 打赏
  • 举报
回复
引用 3 楼 czclk 的回复:
引用 2 楼 yiyaaixuexi 的回复:问题出在: #import "Fraction.m" 请不要import .m 如果不import的话,我在Fraction+MathOps.m里无法引用类Fraction里的属性或者方法,这可怎么办呢?
.h 啊 .h 啊 .h 啊 .h 啊 .h 啊 .h 啊
czclk 2012-11-05
  • 打赏
  • 举报
回复
引用 2 楼 yiyaaixuexi 的回复:
问题出在: #import "Fraction.m" 请不要import .m
 如果不import的话,我在Fraction+MathOps.m里无法引用类Fraction里的属性或者方法,这可怎么办呢?
念茜 2012-11-05
  • 打赏
  • 举报
回复
问题出在: #import "Fraction.m" 请不要import .m
czclk 2012-11-05
  • 打赏
  • 举报
回复
跪求高人解决!!,!
文名: Objective-C基础教程 作者: Mark Dalrymple Scott Knaster译者: 高朝勤 杨越 刘霞图书 分类: 软件 资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社 书号: ISBN: 9787115208774 发行时间: 2009年08月 地区: 大陆 语言: 简体文 简介: 内容简介 Objective-C是扩展C的面向对象编程语言,也是iPhone开发用到的主要语言。本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其的框架,以及继承、复合、源文件组织等众多重要的面向对象编程技术。附录还介绍了如何从其他语言过渡到Objective-C。   本书适合各类开发人员阅读。 内容截图 目录: 第1章 启程.1 1.1 预备知识1 1.2 历史背景1 1.3 内容简介2 1.4 小结3 第2章 对C的扩展4 2.1 最简单的Objective-C程序4 2.2 解构HelloObjective-C程序7 2.2.1 #import7 2.2.2 NSLog()和@"字符串"8 2.3 布尔类型10 2.3.1 BOOL强大的实用功能11 2.3.2 比较13 2.4 小结14 第3章 面向对象编程基础知识15 3.1 间接15 3.1.1 变量与间接16 3.1.2 使用文件名的间接18 3.2 在面向对象的编程使用间接24 3.2.1 过程式编程24 3.2.2 实现面向对象编程29 3.3 学习有关的术语33 3.4 Objective-C的OOP34 3.4.1 @interface部分34 3.4.2 @implementation部分38 3.4.3 实例化对象40 3.4.4 扩展Shapes-Object41 3.5 小结43 第4章 继承45 4.1 为何使用继承45 4.2 继承语法48 4.3 继承的工作机制51 4.3.1 方法调度51 4.3.2 实例变量53 4.4 重写方法55 4.5 小结57 第5章 复合58 5.1 什么是复合58 5.1.1 Car程序58 5.1.2 自定义NSLog()59 5.2 存取方法62 5.2.1 设置发动机的属性64 5.2.2 设置轮胎的属性64 5.2.3 跟踪汽车的变化66 5.3 扩展CarParts程序67 5.4 复合还是继承68 5.5 小结69 第6章 源文件组织70 6.1 拆分接口和实现部分70 6.2 拆分Car程序73 6.3 使用跨文件依赖关系75 6.3.1 重新编译须知75 6.3.2 让汽车开动77 6.3.3 导入和继承79 6.4 小结80 第7章 深入了解Xcode82

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧