如何/在哪里声明用于编写objective-c代码的接口、实现、程序格式中的实例变量?

Posted

技术标签:

【中文标题】如何/在哪里声明用于编写objective-c代码的接口、实现、程序格式中的实例变量?【英文标题】:How/where do I declare instance variables in the interface, implementation, program format for writing objective-c code? 【发布时间】:2013-06-05 06:50:41 【问题描述】:

我正在使用 Stephen Kochan 编写的 Programming in Objective-C 第 4 版自学 Objective-C。作为一个初学者,我还不知道如何调试,即使我将书中的代码复制并粘贴到 Xcode 中,我也会遇到错误。这是我从书中得到的无法编译的代码示例:

#import <Foundation/Foundation.h>
//---- @interface section ----
@interface Fraction: NSObject
-(void) print;
-(void) setNumerator: (int) n; 
-(void) setDenominator: (int) d;
@end
//---- @implementation section ----
@implementation Fraction 
    int numerator;
    int denominator; 

-(void) print 
    NSLog (@"%i/%i", numerator, denominator);

-(void) setNumerator: (int) n 
    numerator = n; 

-(void) setDenominator: (int) d 
    denominator = d; 

@end
//---- program section ----
int main (int argc, char * argv[]) 
    @autoreleasepool  
        Fraction *myFraction;
    // Create an instance of a Fraction
        myFraction = [Fraction alloc]; myFraction = [myFraction init];
    // Set fraction to 1/3
        [myFraction setNumerator: 1]; [myFraction setDenominator: 3];
    // Display the fraction using the print method
        NSLog (@"The value of myFraction is:");
        [myFraction print]; 
    
    return 0; 

我得到的错误是第 12 行的“实例变量规范不一致”。之后它只是一直告诉我“分子”和“分母”未声明。我得到的这个程序的最后一个错误是“@autoreleasepool”中的“@'token”之前有一个“预期的表达式”。我需要更改什么才能使其编译?谢谢!!

【问题讨论】:

你使用哪个xcode版本 我已将您的代码复制到 Xcode 4.6.2 项目中,它编译并运行,没有任何警告。 【参考方案1】:

我在使用 GNUStep 时遇到了同样的错误。更改@interface 声明并设置类似

@interface Fraction: NSObject 
    int numerator;
    int denominator; 


-(void) print;
-(void) setNumerator: (int) n; 
-(void) setDenominator: (int) d;
@end

这成功了,并为我成功编译了程序。

【讨论】:

【参考方案2】:

我假设,您将整个代码复制到一个文件中。 //---- @interface section ---- 进入Fraction .h 文件,//---- @implementation section ---- 进入Fraction .m,其余的是main.m 文件的内容。但是你不应该修改main.m的内容。

【讨论】:

将接口/实现放到单独的 .h/.m 文件中不是强制性的。事实上,问题中给出的代码编译并运行(在 Xcode 4.6.2 上)没有任何警告或问题。 好吧,我的错。感谢您的提醒。【参考方案3】:

@autoreleasepool 是一个新特性,你的编译器似乎太旧了。见autoreleasepool was not declared in this scope error。

【讨论】:

以上是关于如何/在哪里声明用于编写objective-c代码的接口、实现、程序格式中的实例变量?的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C 中在哪里编写 @property 指令?

我如何知道 Xcode Objective-C 中的错误在哪里引发?

[Objective-C]简单实现一个OC类

在objective-c中声明重用协议的位置

没有使用 Objective-C 选择器声明用于通知 UIKeyboardWillShowNotification 和 UIKeyboardWillHideNotification 的方法

如何在 Objective-C 中编写计时器?