Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标-C-在以下方面有困难;初始值设定项链“;_Objective C_Initialization_Xcode4.2_Initializer - Fatal编程技术网

Objective c 目标-C-在以下方面有困难;初始值设定项链“;

Objective c 目标-C-在以下方面有困难;初始值设定项链“;,objective-c,initialization,xcode4.2,initializer,Objective C,Initialization,Xcode4.2,Initializer,好的。在这里很难找到最好的起点。Lion中的错误XCode(4.3.2)返回给我的是: Redefinition of 'a' with a different type 作者说,当我们声明这一行时(在本页底部附近,在main中) …它应该运行良好。没有。它消除了上面的错误。我理解,因为OwnedApplication在其实现中没有init方法,编译器将沿着层次结构向上搜索OwnedApplication的超类,即Appliance,并在那里搜索init方法。它查找重写的init,该init仅

好的。在这里很难找到最好的起点。Lion中的错误XCode(4.3.2)返回给我的是:

Redefinition of 'a' with a different type
作者说,当我们声明这一行时(在本页底部附近,在main中)

…它应该运行良好。没有。它消除了上面的错误。我理解,因为OwnedApplication在其实现中没有init方法,编译器将沿着层次结构向上搜索OwnedApplication的超类,即Appliance,并在那里搜索init方法。它查找重写的init,该init仅包含以下行

[self initWithProductName:@"Unknown"];
…然后运行它。明白

啊。对不起,伙计们。我只是想解释一下我认为可能发生的事情。花了十几行,我才刚刚触及表面。与其说我认为正在发生的事情让你厌烦,我只想问:

这个代码是怎么回事?由于缺少更好的术语,初始化“路径”在哪里结束?重新定义(错误)发生在哪里

/******************设备.h********************/
#进口
@接口设备:NSObject
{
NSString*productName;
内部电压;
}
@属性(副本)NSString*productName;
@特性电压;
-(id)init;
//指定初始值设定项
-(id)initWithProductName:(NSString*)pn;
...
@结束
/********************电器********************/
#导入“Appliance.h”
@实现设备
@电压;
-(id)init
{
返回[self-initWithProductName:@“未知”];
}
-(id)initWithProductName:(NSString*)pn
{
self=[super init];
如果(自我){
[self-setProductName:pn];
[自整定电压:120];
}
回归自我;
...
@结束
/********************拥有应用程序********************/
#导入“Appliance.h”
@接口拥有应用程序:设备
{
NSMutableSet*所有者名称;
}
//指定初始值设定项
-(id)initWithProductName:(NSString*)pn
firstowner名称:(NSString*)n;
...
@结束
/********************拥有应用程序********************/
#导入“ownedApplication.h”
@实施所有权申请
-(id)initWithProductName:(NSString*)pn
firstOwnerName:(NSString*)n
{
self=[super initWithProductName:pn];
如果(自我){
所有者名称=[[NSMutableSet alloc]init];
如果(n){
[所有者名称添加对象:n];
}
}
回归自我;
}
-(id)initWithProductName:(NSString*)pn
{
返回[self-initWithProductName:pn
firstOwnerName:nil];
}
...
@结束
/********************main.m********************/
#进口
#导入“Appliance.h”
#导入“ownedApplication.h”
int main(int argc,const char*argv[]
{
@自动释放池{
//先前省略的问题代码:
设备*a=[[Appliance alloc]init];
NSLog(@“a为%@”,a);
[a setProductName:@“洗衣机”];
[a设定电压:240];
NSLog(@“a为%@”,a);
//以下行是发生错误的位置:
OwnedApplication*a=[[OwnedApplication alloc]init];
...
}
返回0;
}
关于这个问题以及如何提问,我想了很多。我不认为这是一个非常愚蠢的问题。:)但是我的大脑在研究这些东西的9个小时后被炸了,所以如果这是一个非常明显的问题,我道歉。蒂亚


编辑:main()现在包含了实际导致错误的代码。感谢Jacques,尽管省略了它,但它仍然能够捕获它。

编译器实际上告诉您变量本身,
a
,已经声明了两次;错误与赋值无关。在范围中的其他地方,您还有另一个变量ed
a
,其类型与
OwnedApplication*
不同。更改其中一个(或两个)的名称错误就会消失。

尝试更改变量的名称。错误是关于变量本身,而不是赋值。Gross.lol正如我所怀疑的,答案非常明显。今天我不再学习了。谢谢,JC.:)明白了。我编辑并包含了问题代码,最初省略了。谢谢回答,Jacques。
[self initWithProductName:@"Unknown"];
/********************  Appliance.h  ********************/

#import <Foundation/Foundation.h>

@interface Appliance : NSObject
{
    NSString *productName;
    int voltage;
}

@property (copy) NSString *productName;
@property int voltage;

-(id)init;
// Designated initializer
-(id)initWithProductName:(NSString *)pn;
...
@end

/********************  Appliance.m  ********************/

#import "Appliance.h"

@implementation Appliance

@synthesize productName, voltage;

-(id)init
{
    return [self initWithProductName:@"Unknown"];
}

-(id)initWithProductName:(NSString *)pn
{
    self = [super init];

    if (self) {    
    [self setProductName: pn];
    [self setVoltage: 120];
    }

    return self;
...

@end

/********************  OwnedAppliance.h  ********************/

#import "Appliance.h"

@interface OwnedAppliance : Appliance
{
    NSMutableSet *ownerNames;
}

// Designated initializer
-(id)initWithProductName:(NSString *)pn
          firstOwnerName:(NSString *)n;
...

@end

/********************  OwnedAppliance.m  ********************/

#import "OwnedAppliance.h"

@implementation OwnedAppliance

-(id)initWithProductName:(NSString *)pn
          firstOwnerName:(NSString *)n
{
    self = [super initWithProductName:pn];

    if (self) {
        ownerNames = [[NSMutableSet alloc] init];

    if (n) {
        [ownerNames addObject:n];
        }
    }
    return self;
}

-(id)initWithProductName:(NSString *)pn
{
    return [self initWithProductName:pn
                      firstOwnerName:nil];
}
...
@end

/********************  main.m  ********************/

#import <Foundation/Foundation.h>
#import "Appliance.h"
#import "OwnedAppliance.h"

int main(int argc, const char * argv[])
{
    @autoreleasepool {
    //  Previously omitted problematic code:
        Appliance *a = [[Appliance alloc] init];
        NSLog(@"a is %@", a);
        [a setProductName:@"Washing Machine"];
        [a setVoltage:240];
        NSLog(@"a is %@", a);

    //  The following line is where the error occurs:
        OwnedAppliance *a = [[OwnedAppliance alloc] init];
        ...
    }
    return 0;
}