используя @property для класса, который я реализовал - PullRequest
0 голосов
/ 21 января 2012

Я создал два класса в цели c, и я хотел бы использовать один из них как свойство другого. Чтобы быть более конкретным, один из классов - это «термин», который содержит целочисленную переменную и строку nsst, которая действует как переменная. Другой класс - это «выражение», в котором в качестве переменной экземпляра имеется массив nsmutable, в качестве объектов которого используются «термины». То, что я хочу сделать, это добавить возможность того, чтобы один из терминов имел «выражение» в качестве свойства для реализации чего-то вроде распределения по скобкам и замены выражения для переменной. Тем не менее, XCode сообщает мне, что «выражение» не является допустимым именем типа, несмотря на тот факт, что я импортировал мой заголовочный файл выражения. Я думаю, что где-то читал, что только базовые классы доступны для использования в качестве свойств. Что я могу сделать, чтобы добавить этот класс в качестве переменной экземпляра?

Ответы [ 2 ]

2 голосов
/ 21 января 2012

Я подозреваю, что у вас есть цикл импорта, например:

Expression.h

#import "Term.h"

@interface Expression : NSObject
...

Term.h

#import "Expression.h"

@interface Term : NSObject
...

Обратите внимание, как каждый файл импортируетДругой?Это не сработает.Вместо этого вам нужно использовать предварительные объявления:

Expression.h

@class Term;  // tell the compiler that Term is a class name

@interface Expression : NSObject
...

Term.h

@class Expression;  // tell the compiler that Expression is a class name

@interface Term : NSObject
...

Затем в ваших .m файлах вы можетебезопасно импортировать оба .h файла:

Expression.m

#import "Expression.h"
#import "Term.h"

@implementation Expression
...

Term.m

#import "Term.h"
#import "Expression.h"

@implementation Term
...
1 голос
/ 27 мая 2013

Хотя приведенные выше ответы также верны, в моем случае возникла проблема, заключавшаяся в том, что "@end" отсутствовал в объявлении прототипа / интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...