objective-c - traductor - traducir en español
#import en el objetivo C: ¿Estoy haciendo esto mal? (3)
Lo sentimos, no pudimos encontrar un título más apropiado.
En Mi código, tengo dos clases que deberían saber de la existencia de los demás. Entonces utilizo una variable de instancia que apunta a la otra clase. Para que eso funcione (¿supongo?) El archivo de cabeceras de otras clases debe importarse para que sepa qué métodos tiene y tal.
Aquí está mi código (despojado)
MainMenuController.h:
#import <Cocoa/Cocoa.h>
#import "IRCConnection.h"
@interface MainMenuController : NSViewController {
IRCConnection *ircConnection;
}
@property (strong) IRCConnection *ircConnection;
@end
IRCConnection.h:
#import <Foundation/Foundation.h>
#import "MainMenuController.h"
@interface IRCConnection : NSObject {
MainMenuController *mainMenuController;
}
@property (strong) MainMenuController *mainMenuController;
@end
Como puede ver, ambos se importan entre sí, pero esto crea un error (nombre de tipo desconocido ''IRCConnection'') en uno, y en el otro nombre de tipo desconocido ''MainMenuController''.
Sin embargo, cuando la conexión es de una sola manera (por ejemplo, solo MainMenuController sabe acerca de IRCConnection) y, por lo tanto, solo hay una declaración de importación en uno de los dos, funciona bien.
¿Cómo puedo hacer que se conozcan el uno al otro? En ambos sentidos.
Espero que esta pregunta tenga sentido.
En el encabezado, use forward declaration:
@class IRCConnection;
@interface MainMenuController : NSViewController {
IRCConnection *ircConnection; // ok
}
En el archivo de origen ( .m
), haz #import
.
No puedes tener importaciones circulares. Debes dividirlos o presentar algunas declaraciones avanzadas.
puede eliminar la importación de IRCConnection.h
y usar una instrucción @class
lugar.
Me gusta esto:
#import <Foundation/Foundation.h>
@class MainMenuController;
@interface IRCConnection : NSObject {
luego agrega un #import "MainMenuController.h"
a IRCConnection.m