2009-07-03 11 views
1

J'ai un projet qui est principalement en C++, mais j'essaye de lier dans une bibliothèque Objective-C++. J'ai un en-tête qui ressemble à:Y compris le type Objective C++ dans la définition de classe C++

CPlus.h:

#import "OBJCObject.h" 

class CPlus { 
    OBJCObject *someObj; 

}; 

CPlus.mm:

CPlus::CPlus() { 
    someObj = [[OBJCObject alloc] init]; 
} 

Quand j'importer l'en-tête de Objective-C dans mon code je me retrouve avec des milliers d'erreurs à l'intérieur du SDK iPhone. Il semble que quelque chose traite une langue comme si elle était une autre. Désolé si cette description est pauvre, je suis nouveau à ceci, et suis quelque peu confus.

Pouvez-vous inclure les types Objective-C/Objective-C++ dans les classes C++? Y at-il quelque chose de spécial que vous devez faire pour inclure les en-têtes pour les autres types?

Répondre

3

Êtes-vous #import de CPlus.h à partir d'un fichier Objective-C (.m)? Si tel est le cas, il ne comprendra pas la classe C++ car il est compilé avec la sémantique C et n'est pas conscient de Objective-C++. Le compilateur .m verra class et ne sait pas quoi faire.

Vous pouvez inclure des objets Objective-C dans les définitions de classe C++ et vice versa, tant que le fichier source est .mm.

0

Ce qui suit est compatible avec le SDK IPhone. Assurez-vous de déclarer le constructeur C++ et de l'implémenter dans un fichier .mm.

OBJCObject.h

#import <Foundation/Foundation.h> 

@interface OBJCObject : NSObject { 
} 

@end 

OBJCObject.m

#import "OBJCObject.h" 

@implementation OBJCObject 

@end 

CPlus.h

#import "OBJCObject.h" 

class CPlus { 
    OBJCObject *someObj; 
    CPlus(); 
}; 

CPlus.mm

#include "CPlus.h" 

CPlus::CPlus() { 
    someObj = [[OBJCObject alloc] init]; 
} 
Questions connexes