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

Error: 'class name' redeclared as different kind of symbol?

本文关键字:同类型 符号 声明 class name 错误 新声明      更新时间:2023-10-16

我遇到了与这个问题相同的错误

我克服了这个错误的解决方案,提前声明类在我的。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

我知道你在使用c++和Objective-C。

我建议重命名所有的.cpp.m文件,其中Objective-C和c++代码相遇使用扩展.mm -这告诉编译器使用"objective - c++"规则,并将停止许多编译器的麻烦。

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

EDIT回复评论:我不确定你的第一个新问题-只要FFTBufferManagerCAStreamBasicDescription都是c++类,它就应该工作得很好。至于第二个,取决于那行代码的确切位置(CAStreamBasicDescription thruFormat;),您可能需要包括头文件,而不仅仅是前向声明:您在这里声明了CAStreamBasicDescription的实例,编译器需要知道它的结构才能这样做。

一次不能声明多个类。

将你的声明改为

class CAStreamBasicDescription;
class FFTBufferManager;

编译器正在寻找unqualified-id,因为它认为你声明了一个CAStreamBasicDescription类型的变量,所以它期望变量名中给它一个逗号。

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