Ошибка: «имя класса» объявлено как символ другого типа? - PullRequest
0 голосов
/ 07 сентября 2011

Я столкнулся с той же ошибкой, что и в этом вопросе

Я преодолел эту ошибку, решив заранее объявить класс в моем файле .h с class parameter

У меня есть FFTBufferManager.h and FFTBufferManager.cpp файл и я использую его в HomeView.h and HomeView.mm файле

class FFTBufferManager,CAStreamBasicDescription,DCRejectionFilter;

Но теперь у меня ошибка как

#include "FFTBufferManager.h"
#include "aurio_helper.h"
#include "CAStreamBasicDescription.h"

class CAStreamBasicDescription,FFTBufferManager;  //here it shows this error
   EXpected Unqualified-id befor ',' token


@interface HomeView 
{
    FFTBufferManager*           fftBufferManager;
//it shows erros 
 EXpected Unqualified-id befor ',' token
    ISO c++ forbids declaration of FFTBufferManager with no type

}

    @property FFTBufferManager*     fftBufferManager;
 //shows error
'FFTBufferManager' is not a type

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

Я так понимаю, вы используете и C ++, и Objective-C.

Я бы предложил переименовать все файлы .cpp и .m, в которых встречаются коды Objective-C и C ++, для использования расширения .mm - это говорит компилятору использовать правила "Objective-C ++", и остановит много проблем с компилятором.

Кроме того, кажется, CAStreamBasicDescritpion - это класс C ++ - вам придется объявить его вперед с class CAStreamBasicDescritpion;, , а не @class CAStreamBasicDescritpion; (обратите внимание, без знака "at") - Вторая форма предназначена только для деклараций Objective-C . Я подозреваю, что это является основной причиной конкретной ошибки, которую вы наблюдали.

РЕДАКТИРОВАТЬ в ответ на комментарий: я не уверен насчет вашей первой новой проблемы - она ​​должна работать нормально, если FFTBufferManager и CAStreamBasicDescription являются классами C ++. Что касается вашего второго, в зависимости от того, где именно находится эта строка кода (CAStreamBasicDescription thruFormat;), вам может потребоваться включить заголовок, а не просто предвидение: вы объявляете здесь экземпляр CAStreamBasicDescription и компилятор для этого нужно знать его структуру.

1 голос
/ 07 сентября 2011

Вы не можете объявить более одного класса одновременно.

Измените ваши объявления на

class CAStreamBasicDescription;
class FFTBufferManager;

Компилятор ищет unqualified-id, потому что считает, что вы объявляете переменную типа CAStreamBasicDescription, поэтому он ожидает имя переменной, в которой вы дали ей запятую.

0 голосов
/ 07 сентября 2011

Похоже, вы пытаетесь создать класс, который уже существует в одной из структур Какао.

...