错误:'类名'被重新声明为不同类型的符号?

时间:2011-09-07 04:36:54

标签: iphone c++ objective-c forward-declaration

我遇到了与question

中提到的相同的错误

我通过使用class parameter

在我的.h文件中提前声明类的解决方案克服了这个错误

我有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 个答案:

答案 0 :(得分:2)

我正在收集你使用C ++和Objective-C。

我建议重命名所有与Objective-C和C ++代码相遇的.cpp.m文件,以使用扩展名.mm - 这告诉编译器使用“目标-C ++“规则,并将停止很多编译器的麻烦。

此外,似乎CAStreamBasicDescritpion是一个C ++类 - 您必须使用class CAStreamBasicDescritpion; @class CAStreamBasicDescritpion;向前声明它(注意,否“at”符号) - 第二种形式仅用于前向声明 Objective-C 类。我怀疑这是您观察到的特定错误的根本原因。

编辑以回应评论:我不确定您的第一个新问题 - 只要FFTBufferManagerCAStreamBasicDescription都是C ++类,它就应该可以正常工作。至于你的第二个,取决于该行代码的确切位置(CAStreamBasicDescription thruFormat;),你可能需要包含标题而不仅仅是前向声明:你在这里声明CAStreamBasicDescription的实例,编译器需要知道它的结构。

答案 1 :(得分:1)

您不能一次声明多个课程。

将您的声明更改为

class CAStreamBasicDescription;
class FFTBufferManager;

编译器正在寻找unqualified-id,因为它认为你声明了CAStreamBasicDescription类型的变量,因此它需要一个变量名称,你给它一个逗号。

答案 2 :(得分:0)

看起来您正在尝试创建一个已存在于其中一个Cocoa框架中的类。