50 votes

Type inconnu nom de "classe"; avez-vous voulu dire "Classe"?

Je suis en train de mettre en œuvre AQRecorder.la classe h de SpeakHere Apple Xcode exemple de projet, mais même j'ai renommer mon implémentation de la classe à l'ext. *.mm et mettre la ligne avec #import "AQRecorder.h" encore en train d'erreur "Unknown type name 'class'; did you mean 'Class'?" et bien d'autres. Ce qui, selon moi, ça veut dire qu'il n'est pas reconnu en tant que classe C++.

Toute aide sera appréciée.

50voto

Diziet Points 1566

J'ai juste eu exactement ce problème. J'ai eu une-vue-contrôleur à l'aide de la AQRecorder classe de AQRecorder.mm.

Quand j'ai compris AQRecorder.h de mon point de vue contrôleur de ces erreurs se sont produites. Il est apparu à moi, parce que ma droite objective-c-vue-contrôleur (nommé .m fichier) a été y compris les fichiers d'en-tête C++ le compilateur jetait des erreurs.

Il y a deux solutions. Le moyen le plus rapide est de renommer la vue de contrôleur de classe, y compris AQRecorder.h à un .mm, dans mon cas UIRecorderViewController .m .mm.

Ou bien, déplacez la suite comprend:

#include "CAStreamBasicDescription.h"
#include "CAXException.h"

De AQRecorder.h en AQRecorder.mm. Cela signifie que tout de style C++ fichiers d'en-tête n'est plus inclus (par référence) dans votre plaine de l'Obj-C source.

Espère que ça aide, et de la logique.

21voto

Steve HHH Points 3088

Dans mon cas, cette erreur a été causée par cyclique "Importer" des déclarations en deux classes: le fichier d'en-tête pour chaque classe inclus l'en-tête de l'autre catégorie, résultant dans l' Inconnu du nom de type 'ClassA'; as-tu veux dire "ClassB'? erreur:

enter image description here

C'est de cette façon mes déclarations d'importation ont été configurés lorsque j'ai eu cette erreur. En ClassA.h:

Import "ClassB.h"

En ClassB.h:

Import "ClassA.h"

Pour le fixer, j'ai utilisé l' @class avant la déclaration de la directive à l'avant-déclarer ClassA en ClassB.h (cela promet le pré-compilateur qui ClassA est une classe valide, et qu'il sera disponible au moment de la compilation). Par exemple:

En ClassA.h:

Import "ClassB.h"

En ClassB.h:

@class ClassA;

Cette correction de l' Inconnue nom du type 'ClassA' erreur, mais a également introduit un nouveau message d'erreur: ClassB.m: Récepteur de type 'ClassA", par exemple de message est une déclaration anticipée. Par exemple:

enter image description here

Pour résoudre cette nouvelle erreur, j'ai dû importer ClassA.h au-dessus de la mise en œuvre de fichier de ClassB (ClassB.m). Les deux erreurs sont maintenant résolus et j'obtiens zéro les erreurs et les avertissements.

Par exemple, j'ai maintenant:

En ClassA.h:

Import "ClassB.h"

En ClassB.h:

@class ClassA;

En ClassB.m:

Import "ClassA.h"

Les deux messages d'erreur sont maintenant résolus.

8voto

Zhou Points 100

j'ai rencontré la même erreur avec vous, j'espère que mes solution peut vous aider. Xcode compilateur pourrait compiler objective-c et c++ dans le "*.mm" fichier, de sorte que vous pouvez changer tout votre fichier d'importation "AQRecorder.h"(direct et indirect) du fichier avec ".mm" postfix. Mais vous ne pouvez pas le faire, vous pouvez constater que la relation entre SpeakHereController et SpeakHereViewController est quelque peu délicate, je viens d'apprendre la façon dont il l'a utilisé, qui créent de la SpeakHereController objet d'une plume de fichier, de sorte SpeakHereViewController fichier n'est pas importer le "AQRecorder.h" fichier. mon anglais est stupide, j'espère que ma réponse peut vous aider.

3voto

carmin Points 309

IMPORTANT: Sélectionnez "Compiler la Source Comme" variable dans les paramètres du compilateur et affectez-lui la valeur "Objective-C++".

2voto

chicha Points 21

Il semble que ce problème est impossible à résoudre. Si il est possible de décaler #include "myC++.h"*.mm de fichier, alors il fonctionne. Mais si Vous avez besoin de l'utiliser à partir de votre objectiveC.h fichier il échoue. Je suppose que c'est un bug d'apple. Il y a un moyen de spécifier *.mm au lieu de *.m mais il n'y a rien de semblable à *.hh au lieu de *.h

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X