Objective c 尝试实例化我自己的类时出现编译器错误
我试图创建一个类的实例,Objective c 尝试实例化我自己的类时出现编译器错误,objective-c,Objective C,我试图创建一个类的实例,Dog,但编译器无法识别该类,也不会实例化它。我尝试将超类Pet中的初始值设定项复制到Dog,但没有成功。为什么我不能实例化Dog对象 宠物h 狗 狗 main.m #import <Foundation/Foundation.h> #import "Pet.h" int main(int argc, const char * argv[]) { @autoreleasepool { Dog *d = [[Dog alloc]
Dog
,但编译器无法识别该类,也不会实例化它。我尝试将超类Pet
中的初始值设定项复制到Dog
,但没有成功。为什么我不能实例化Dog
对象
宠物h
狗
狗
main.m
#import <Foundation/Foundation.h>
#import "Pet.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
Dog *d = [[Dog alloc] init]];
}
return 0;
}
#导入
#进口“Pet.h”
int main(int argc,const char*argv[]
{
@自动释放池
{
狗*d=[[Dog alloc]init]];
}
返回0;
}
您没有将Dog导入到具有main方法的方法中。加:
#import "Dog.h"
根据宠物进口条例。您可能需要考虑将所有域对象放在一个标题中。 < P> >我注意到的一些事情:
- 您的
需要导入main.m
,而不仅仅是Dog.h
,因为它特别指的是Pet.h
类Dog
中的接口重新声明了父类中已经声明的一组方法。您不需要这样做——所有类都隐式支持父类上定义的所有方法。他们是否需要唯一的实现由您决定,但不需要在标题中说明Dog.h
- 既没有实现
也没有实现-[Dog init]
。也许您想要(未完全实现的)-[Pet init]
方法+[Dog randomPet]
- 使用
\import Dog.h
Dog*d=[[Dog alloc]init]]代码>应该是
Dog*d=[Dog alloc]init]代码>
- 无需在子类中重新定义与在超类中相同的方法 除了这些答案,我还想补充几点,这些不是错误,但会增加您的cocoa编程风格和习惯: 方法
- 您有以下错误:
//Initializer
-(id)initName:(NSString *)name
initColor:(NSString *)color
initBreed:(NSString *)breed;
不符合标准,应为:
//Initializer
-(id)initName:(NSString *)name withColor:(NSString *)color withBreed:(NSString *)breed;
在下面几行中
int petId;
while(petId != 1 && petId!=2)
用petID=0初始化怎么样代码>?如果它的垃圾值变为1,那么它将永远不会进入循环
您可以使用@property来创建属性。将多个接口合并到一个头文件中不是Objective-C的标准做法。有趣的是,一位苹果工程师提到,现在可以这样做,因为编译器足够聪明,不会因为在2012年的WWDC会话中在许多地方看到同一个文件而出错。哦,当然可以。这不是标准的做法,仅此而已。这样做会让人困惑。:)一旦你开始使用CoreData,你会很快厌倦导入每个实体和类别。当你编译它时会发生什么?你读过错误信息了吗?这里有很多无关的材料,这使得这个问题不太可能对其他人有帮助。解决这样一个问题的第一步是将其本地化——将代码减少到仍然存在问题的最低限度。有关这方面的一些有用信息,请参阅。因为我碰巧知道什么是无关的,所以我将对其进行大量编辑,以便将来的读者能够从中获得一些价值。我看不到Dog*[d[[Dog alloc]init]
问题修订版中的任何地方,OP在此处删除的答案下方指出,缺少的@end
s只是复制粘贴错误,因此我已从您的答案中删除这些项目,以保持对实际问题的关注。Dog*[d[[Dog alloc]init]
位位于您编辑的main.m
的一部分。我没有看到额外的括号,只是缺少赋值运算符。--就在底部附近。我看到了Dog*d[[Dog alloc]init]];
,它确实有一个我没有看到的额外括号,但在右侧,不是在*
和d
之间(我在编辑问题时也漏掉了它)。我和我的同事都不知道⌘F见Dog*[d[[Dog alloc init]
。如果你对我的编辑感到不满,我很抱歉。我只是想挽回这个问题,因为如果没有重点,我认为它应该得到否决票、接近票和删除——这对任何人都没有帮助。@JoshCaswell:我给出了答案,但出现了一些问题。现在我已经更新了,但duskwuff也改变了他的答案。 :(
#import "Dog.h"
//Initializer
-(id)initName:(NSString *)name
initColor:(NSString *)color
initBreed:(NSString *)breed;
//Initializer
-(id)initName:(NSString *)name withColor:(NSString *)color withBreed:(NSString *)breed;
int petId;
while(petId != 1 && petId!=2)