Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
Xcode抛出“;指定的实例变量数量不一致";,但不是在更新的Mac上_Xcode - Fatal编程技术网

Xcode抛出“;指定的实例变量数量不一致";,但不是在更新的Mac上

Xcode抛出“;指定的实例变量数量不一致";,但不是在更新的Mac上,xcode,Xcode,我正试图从我刚拿到的一本Objective-C书中构建一些示例代码 我使用的是Xcode 4.2的旧版(2006年,32位,雪豹版)MacBook Pro。关于“指定的实例变量数量不一致”,我得到了大约8个错误 我在更新的MacBookPro(2010,64位,Lion)上编译了相同的代码,所有的东西都编译得很好 下面是一张代码和错误已展开的图片: 实例变量需要在@interface部分声明,而不是在@implementation中声明: @interface Fraction: NSObj

我正试图从我刚拿到的一本Objective-C书中构建一些示例代码

我使用的是Xcode 4.2的旧版(2006年,32位,雪豹版)MacBook Pro。关于“指定的实例变量数量不一致”,我得到了大约8个错误

我在更新的MacBookPro(2010,64位,Lion)上编译了相同的代码,所有的东西都编译得很好

下面是一张代码和错误已展开的图片:


实例变量需要在@interface部分声明,而不是在@implementation中声明:

  @interface Fraction: NSObject {
    int numerator;
    int denominator;
  }
  ...

@implementation{}
块中的实例变量声明是相对较新的Objective-C特性。正如您所发现的,这在编译32位时不起作用。原因是您还需要符合“现代”Objective-C运行时的资格,根据,它可以在iOS、OS X 10.5和更高版本的64位上使用。OS X 10.5之前版本和OS X 32位版本使用传统运行时


因此,如果需要为32位OS X构建,则必须在
@interface
块中保留实例变量声明。

我遇到了这个问题。从32/64位目标体系结构更改为仅63位。已修复。

我实际上只看到一次错误,还有6个其他错误?但为什么要在更新的mac上编译?如果我把它们移到接口部分,它只会告诉我:“不能在@interface中声明变量”“不能声明…”听起来好像你没有包括大括号?啊!这并不能解释为什么它可以在更少的mac上正常运行:很好的一点,区别在于32位应用程序使用的是遗留运行时。只有64位应用程序和iOS应用程序使用较新的运行时。运行时之间的主要区别在于,现代运行时在实例变量和属性方面为您提供了更大的灵活性。我似乎找不到确切描述这一点的文档,但我认为这就是原因。@StevenP:更新版本的gcc和clang允许您在实现块中声明实例变量。您可能正在旧Mac上使用旧版本的编译器。