2010-07-30 4 views
0

Je veux déclarer un style de classe C++ dans un en-tête objective-c, mais j'obtiens une erreur "error: expected '=', ',', ';', 'asm' ou '__ attribut __' avant 'CPPClass' "Déclaration de classe C++ dans l'en-tête objective-c

Voici le code du fichier .h.

class CPPClass; 
@interface OBJCClass : NSObject 
{ 
    CPPClass* m_pCPPObject; 
} 
@end 

si je le mettre en œuvre un style objectif-c @class CPPClass je reçois une erreur lors de la définition, en disant qu'il ne peut pas trouver la déclaration d'interface. Y at-il de toute façon à faire cela, sinon, toutes les classes objectives-c qui importent mon fichier d'en-tête avec l'en-tête C++ importé doivent aussi être des fichiers .mm.

ps. J'ai renommé le fichier m en mm.

+0

Quels sont les fichiers que vous avez? CPPClass.cpp, CPPClass.h, OBJCClass.mm et OBJCClass.h? Qu'est-ce que le fichier en cours de compilation est réellement répertorié immédiatement avant l'erreur de compilation? Ma conjecture est que le fichier .cpp se plaint réellement quand #include le fichier avec les définitions d'obj-c. –

+0

les classes sont comme vous l'avez dit, le fichier cpp n'inclut jamais le OBJCClass.h. Je pense que le problème est que d'autres classes obj-c incluent OBJCClass.h et ne peuvent pas interpréter la déclaration de style c. – MartinG

Répondre

1

Renommez tous les fichiers qui contiennent des extensions .mm. Cela indiquera au compilateur de compiler avec le drapeau -ObjC++.

+0

J'avais peur de ça, c'est plus qu'un couple de fichiers qui inclut ce fichier et j'espérais qu'il y avait un moyen de contourner ça :( – MartinG

3

Déclarez la classe cpp uniquement lors de la compilation de C++. Utilisez un typedef pour annuler autrement:

#ifdef __cplusplus 
class CPPClass; 
#else 
typedef void CPPClass; 
#endif 

De cette façon, non C++ unités de compilation voir la variable d'instance comme un pointeur vide. Comme tous les pointeurs ont la même taille, le type de la variable d'instance n'a pas d'importance.

Questions connexes