Реализующий класс: не удается найти суперкласс - PullRequest
2 голосов
/ 05 августа 2011

У меня есть ForceGaugeViewController класс и ForceGaugeController класс.Я пытаюсь сделать класс ForceGaugeController подклассом ForceGaugeViewController, но получаю ошибки.

Ошибка:

Не удается найти объявление интерфейса для суперкласса ForceGaugeViewController класса ForceGaugeController.

ForceGaugeViewController.h

#import <UIKit/UIKit.h>
#import <math.h>
#import "HardwareController.h"
#import "ForceGaugeController.h"

@interface ForceGaugeViewController : UIViewController{
}
end

ForceGaugeViewController.m

#import "ForceGaugeViewController.h"

@implementation ForceGaugeViewController

ForceGaugeController.h

#import <Foundation/Foundation.h>
#import "ForceGaugeViewController.h"
#import "FMDatabase.h"
#import "FMResultSet.h"

@class ForceGaugeViewController;

// error here
@interface ForceGaugeController : ForceGaugeViewController{
}
@end

ForceGaugeController.m

#import "ForceGaugeController.h"

Ответы [ 4 ]

7 голосов
/ 05 августа 2011

Вы можете не только перенаправить ссылку на класс, который вы унаследуете, либо протокол, который вы будете реализовывать.Вам просто нужно импортировать суперкласс в заголовок, который вы уже делаете, а затем удалить объявление @class.

Редактировать: Также суперкласс ForceGaugeViewController не должен включать подкласс ForceGaugeViewController в заголовочный файл.

ForceGaugeController.h

#import <Foundation/Foundation.h>
#import "ForceGaugeViewController.h"
#import "FMDatabase.h"
#import "FMResultSet.h"

@interface ForceGaugeController : ForceGaugeViewController{
 }
@end
5 голосов
/ 06 декабря 2014

Обязательно избегайте кругового импорта: Убедитесь, что вы не импортируете ни один из файлов подклассов заголовка или реализации в файл суперкласса, где объявление интерфейса суперкласса (.h файл)

0 голосов
/ 05 августа 2011

Удалить строку:

@class ForceGaugeViewController;

Вы уже импортируете класс ForceGaugeViewController через его заголовочный файл в верхней части файла ForceGaugeController.m.


РЕДАКТИРОВАТЬ 1

И, как указал @Chris Devereux, у вас есть круговая ссылка в заголовочных файлах, вы захотите избавиться от нее какну.


РЕДАКТИРОВАТЬ 2

И не уверен, как я пропустил самовывоз в вашем файле ForceGaugeController.h.Я предполагаю, что это опечатка, но если нет, я уверен, что вы знаете, что вы должны удалить его.

0 голосов
/ 05 августа 2011

Вы включаете ForceGaugeController.h в ForceGaugeViewController.h и включая ForceGaugeViewController.h в ForceGaugeController.h. Циркулярные включения приведут в замешательство компилятор, и, вероятно, это не так.

Файл заголовка для класса должен включать только структуру (т. Е. UIKit), подкласс и любые протоколы, которым соответствует класс. Форвардные объявления подходят для классов переменных экземпляра экземпляра / аргументов / свойств метода.

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