Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unknown type name 'class'; did you mean 'Class'?

I'm trying to implement AQRecorder.h class from SpeakHere Apple Xcode project example, but even I rename my implementation class to ext. *.mm and put line with #import "AQRecorder.h" still getting error "Unknown type name 'class'; did you mean 'Class'?" and many others. Which according to me means that it is not recognized as C++ class.

Any help will be appreciated.

like image 492
Vanya Avatar asked Dec 21 '11 10:12

Vanya


2 Answers

I've just had this exact problem. I had a view controller using the AQRecorder class from AQRecorder.mm.

When I included AQRecorder.h in my view controller these errors occurred. It appeared to me because my straight objective-c view controller (named as a .m file) was including C++ header files the compiler was throwing spurious errors.

There are two solutions. The quickest is to rename the view controller class including AQRecorder.h to be a .mm file, in my case UIRecorderViewController from .m to .mm.

Or, move the following includes:

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

Out of AQRecorder.h into AQRecorder.mm. This means that straight C++ style header files will no longer be included (by reference) in your plain Obj-C source.

Hope that helps, and makes sense.

like image 188
Diziet Avatar answered Oct 12 '22 10:10

Diziet


In my case, this error was caused by cyclical "Import" statements in two classes: the header file for each class included the header of the other class, resulting in the Unknown type name 'ClassA'; did you mean 'ClassB'? error:

enter image description here

This is how my import statements were configured when I got this error. In ClassA.h:

Import "ClassB.h" 

In ClassB.h:

Import "ClassA.h" 

To fix it, I used the @class forward declaration directive to forward-declare ClassA in ClassB.h (this promises the pre-compiler that ClassA is a valid class, and that it will be available at compile time). For example:

In ClassA.h:

Import "ClassB.h" 

In ClassB.h:

@class ClassA; 

This fixed the Unknown type name 'ClassA' error, but also introduced a new error: ClassB.m: Receiver type 'ClassA' for instance message is a forward declaration. For example:

enter image description here

To fix this new error, I had to import ClassA.h at the top of the implementation file of ClassB (ClassB.m). Both errors are now resolved, and I get zero errors and warnings.

For example, I now have:

In ClassA.h:

Import "ClassB.h" 

In ClassB.h:

@class ClassA; 

In ClassB.m:

Import "ClassA.h" 

Both error messages are now resolved.

like image 32
Steve HHH Avatar answered Oct 12 '22 12:10

Steve HHH