Почему я получаю сообщение «ошибка синтаксического анализа перед токеном ‘@'», когда я пытаюсь создать этот простой проект XCode?

#objective-c #xcode #macos #accessor

#objective-c #xcode #macos #средство доступа

Вопрос:

Полный вопрос новичку. Я изучаю Objective-C по книге Кочана. Когда я пытаюсь создать следующий очень простой проект, я продолжаю получать

ошибка синтаксического анализа перед токеном ‘@’

имеется в виду @property int numerator, denominator; оператор во фракции.файл h.

Вот фрагмент.файл h:

 #import <Foundation/Foundation.h>

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

@property int numerator, denominator;

-(void) print;
-(void) setTo: (int) n over: (int) d;
-(double) convertToNum;

@end
  

Вот файл Fraction.m:

 #import "Fraction.h"

@implementation Fraction

@synthesize numerator, denominator;

-(void) print
{
    NSLog(@"%i/%i", numerator, denominator);
}
-(void) setTo: (int) n over: (int) d
{
    numerator = n;
    denominator = d;
}
-(double) convertToNum
{
    if (denominator != 0)
        return (double) numerator/denominator;
    else
        return 1.0;
}

@end
  

Любая помощь в понимании того, почему я получаю эту ошибку синтаксического анализа, очень ценится.

Комментарии:

1. Для меня это компилируется абсолютно нормально. Вы используете старую версию Xcode? Или вы компилируете для OS X 10.4?

2. Вы скопировали и вставили код с веб-сайта или PDF-файла или использовали исходный файл, который вы скачали из Интернета? У меня и раньше возникали проблемы с нестандартными символами «пробела», которые вводили компилятор в заблуждение.

3. Да, я использую «древнюю» версию: OS X 10.4.11 и XCode 2.5! В этом проблема?

4. Я не думаю, что @property это доступно на Tiger. Разве Obj-C не является Leopard 2.0 и выше?

5. Отлично! Пожалуйста, найдите минутку, чтобы добавить это объяснение в качестве ответа и отметить его принятым, чтобы вопрос не отображался в результатах поиска как «Без ответа».

Ответ №1:

Я нашел это в Objective-C 2.0 (но, что интересно, не в книге Кочана): «Все приложения Objective-C, разработанные для Mac OS X, которые используют [вышеуказанные] улучшения для Objective-C 2.0, несовместимы со всеми операционными системами до версии 10.5 (Leopard)». Итак, мы нашли объяснение. Спасибо вам всем.

Ответ №2:

Привет, Scolfax добро пожаловать, похоже, ваша проблема в @property int числитель, знаменатель; и NSLog(@»%i /%i», числитель, знаменатель);