【问题标题】:warning: method definition for ‘+init’ not found - but it is implemented警告:未找到“+init”的方法定义 - 但已实现
【发布时间】:2014-08-01 00:51:13
【问题描述】:

我是 Objective-C 的新手,正在尝试构建一个简单的类。我现在有一段工作代码,但由于某种原因,我无法摆脱两个警告。我做错了什么?
* 如果有任何不同,我会从终端使用 GCC 进行编译。

代码:

#import <objc/Object.h>
#import <stdio.h>

@interface ValueAssignment : Object
{
    char name;
}

+ (void) setVar:(char) x_name;
+ (id) init;
@end

@implementation ValueAssignment

- (void) setVar:(char) x_name{
    name = x_name;
}

- (id) init {
    if(self = [super init]){
        name = ' ';
    }else{
        return nil;
    }
}
@end

/** Main program for the program execution entry **/
int main(int argv, char* argc[])
{
//    id o = [ValueAssignment new];
    id o = [[ValueAssignment alloc] init];

    [o setVar:'9'];

    printf("Bye.\n");
}

编译:

gcc -arch i386 -o hello -l objc test.m

输出:

test.m:26: warning: incomplete implementation of class ‘ValueAssignment’
test.m:26: warning: method definition for ‘+init’ not found
test.m:26: warning: method definition for ‘+setVar:’ not found

编辑:

如果我将实现部分更改为+ (id) init {,那么我会得到以下输出:

test.m: In function ‘+[ValueAssignment setVar:]’:
test.m:16: warning: instance variable ‘name’ accessed in class method
test.m: In function ‘+[ValueAssignment init]’:
test.m:21: warning: instance variable ‘name’ accessed in class method

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    改变界面。您将 init 声明为类方法而不是实例方法:

    + (id) init;
    

    应该是:

    - (id) init;
    

    setVar: 方法也是如此。

    除非您有充分的理由不这样做,否则请更改:

    id o = [[ValueAssignment alloc] init];
    

    到:

    ValueAssignment *o = [[ValueAssignment alloc] init];
    

    【讨论】:

    • 我做到了。你改错了。阅读我的答案。
    • 好的,现在它给了我一个分段错误.. :-\ -- 不管怎样,你能用一句话说 - 和 + 是什么意思吗?我认为它的“私人”和“公共”。 --谢谢!
    • 不,是类和实例。请找到一个好的 Objective-C 教程来学习语言的基础知识。至于分段错误,这是一个全新的问题。这个问题已经回答并解决了。关闭这个。最好在您努力调试问题后发布有关分段错误的新问题。
    【解决方案2】:

    类方法+init和实例方法-init是有区别的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多