繁体   English   中英

错误:“类名”重新声明为另一种符号?

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

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

我通过使用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

我正在收集您同时使用C ++和Objective-C的情况。

我建议重命名所有满足Objective-C和C ++代码要求的.cpp.m文件,以使用扩展名.mm这告诉编译器使用“ Objective-C ++”规则,并且将停止大量编译器麻烦。

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

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

您一次不能声明多个类。

将声明更改为

class CAStreamBasicDescription;
class FFTBufferManager;

编译器正在寻找一个unqualified-id因为它认为您在声明一个类型为CAStreamBasicDescription的变量,因此它希望在变量名中使用逗号。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM