Nombre de tipo desconocido 'clase'. ¿Quiso decir 'Clase'?

Nombre de tipo desconocido 'clase'. ¿Quiso decir 'Clase'?

Acabo de tener este problema exacto. Tenía un controlador de vista usando la clase AQRecorder de AQRecorder.mm.

Cuando incluí AQRecorder.h en mi controlador de vista, ocurrieron estos errores. Me pareció porque mi controlador de vista directo de Objective-C (nombrado como un archivo .m) incluía archivos de encabezado C ++, el compilador arrojaba errores espurios.

Hay dos soluciones. Lo más rápido es cambiar el nombre de la clase de controlador de vista, incluido AQRecorder.h, para que sea un archivo .mm, en mi caso, UIRecorderViewController de .m a .mm.

O mueva lo siguiente incluye:

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

De AQRecorder.h a AQRecorder.mm. Esto significa que los archivos de encabezado de estilo C++ directo ya no se incluirán (por referencia) en su código fuente simple de Obj-C.

Espero que ayude y tenga sentido.


En mi caso, este error fue causado por declaraciones cíclicas de "Importación" en dos clases:el archivo de encabezado para cada clase incluía el encabezado de la otra clase, lo que resultó en el nombre de tipo Desconocido 'ClassA'; ¿Quiso decir 'Clase B'? error:

Así es como se configuraron mis declaraciones de importación cuando recibí este error. En ClassA.h :

Import "ClassB.h"

En ClassB.h :

Import "ClassA.h"

Para arreglarlo, usé el @class directiva de declaración de reenvío para declarar ClassA en ClassB.h (Esto promete al precompilador que ClassA es una clase válida y que estará disponible en el momento de la compilación). Por ejemplo:

En ClassA.h :

Import "ClassB.h"

En ClassB.h :

@class ClassA;

Esto arregló el Nombre de tipo desconocido 'ClassA' error, pero también introdujo un nuevo error:ClassB.m :El tipo de receptor 'ClassA' para el mensaje de instancia es una declaración de reenvío. Por ejemplo:

Para corregir este nuevo error, tuve que importar ClassA.h en la parte superior del archivo de implementación de ClassB (ClassB.m ). Ambos errores ahora están resueltos y recibo cero errores y advertencias.

Por ejemplo, ahora tengo:

En ClassA.h :

Import "ClassB.h"

En ClassB.h :

@class ClassA;

En ClassB.m :

Import "ClassA.h"

Ambos mensajes de error ahora están resueltos.


Encontré el mismo error con usted, espero que mi solución pueda ayudarlo. El compilador de Xcode podría compilar Objective-C &C++ en el archivo "*.mm", por lo que puede cambiar todos los nombres de archivo que importan el archivo "AQRecorder.h" (todo directo e indirecto) con el postfijo ".mm". Pero es posible que no haga eso, puede encontrar que la relación entre SpeakHereController y SpeakHereViewController es un poco complicada, acabo de aprender cómo lo usó, que crea el objeto SpeakHereController en un archivo nib, por lo que el archivo SpeakHereViewController no tiene que importar el "AQRecorder archivo .h". mi inglés es estúpido, espero que mi respuesta pueda ayudarte.