我正在尝试在我的 Objective-C 代码中为 iPhone 应用程序使用一些 C++ 类。我只是想声明 C++ 对象,但遇到了问题。尽管我在想要使用它的 Objective-C 类中声明了 C++ 头文件,但我的 Objective-C 似乎无法识别 C++ 对象。这是我的 Objective-C 代码:
//implementation file
#import "CPPClass.h"
@implementation MyViewController
- (void) viewDidLoad
{
CPPClass object;
}
Run Code Online (Sandbox Code Playgroud)
但我收到“使用未声明的标识符‘CPPClass’”警告。
我该怎么做?
我有两个类ClassA和Class B(它们是viewControllers).
A类是classB的委托.
ClassA"laucnhes"和ClassB的实例.
classA上的ClassB调用方法.
让我们说它是:
#import "ClassB.h"
@interface ClassA : NSObject {
ClassB* subController;
}
- (void) doThis;
-------------------------------
#import "ClassA.h"
@interface ClassB : NSObject {
ClassA* delegate;
}
-------------------------------
@implementation ClassB
- (void) someMethod {
AnObject* myObj = [self.delegate.arr objectAtIndex:8];
[self.delegate doThis];
}
Run Code Online (Sandbox Code Playgroud)
这样做,A必须导入B,B必须导入A.
如果B不导入A(仅使用@class A),则来自A的used属性存在编译错误.
如果B导入A,则该ClassA* delegate行上存在编译错误.
为什么我有这些编译错误?#import不会再次保护递归调用吗?
我不需要解决方案来解决这个问题,我知道如何做到这一点.
但我想知道为什么我的#import会导致这些问题.这些不是#includes ......
我的.h文件:
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "GameData.h"
#import "PROBattleScene.h"
@interface PROBattleAI : NSObject {
BattleType type;
PROBattleScene *scene;
}
-(id)initWithType:(BattleType)_type andBattleInformation:(NSMutableDictionary*)_information andScene:(PROBattleScene*)_scene;
-(void)dealloc;
@end
Run Code Online (Sandbox Code Playgroud)
但是在线上PROBattleScene *scene;我从Xcode获得了未知类型名称错误.
我在这里尝试了答案:xcode未知的类型名称,但我已经这样做了(并且不起作用).
为什么会这样?我已经导入了我的PROBattleScene.h文件,为什么不被识别?
编辑:和PROBattleScene.h要求的内容:
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "GameData.h"
#import "SimpleAudioEngine.h"
#import "PROBattleBackground.h"
#import "PROBattleAI.h"
@interface PROBattleScene : CCLayer {
NSMutableDictionary *battleInformation;
NSMutableArray *localPlayerPartyData;
PROBattleBackground *background;
CCNode *base;
PROBattleAI *enemyAI;
}
+(CCScene*)scene;
-(id)init;
-(void)loadBattleInformation;
-(void)loadBGM;
-(void)loadBackground;
-(void)loadBase;
-(void)loadEnemyAI;
-(void)beginBattle;
@end
Run Code Online (Sandbox Code Playgroud) 从面向对象的角度来看(主要是C++和Objective C),
将项目中使用的所有头文件包含在单个(.h)中是一个很好的编程习惯,只需在所有实现文件中包含此头文件以及(右)使用"header guard"和"#pragma once" "(或#import)?
这可能是什么负面影响?
objective-c ×4
c++ ×2
header ×1
header-files ×1
import ×1
include ×1
ios ×1
iphone ×1
oop ×1
xcode ×1