错误:'class name'重新声明为不同类型的符号?
Error: 'class name' redeclared as different kind of symbol?
我遇到了与这个问题相同的错误
我克服了这个错误的解决方案,提前声明类在我的。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回复评论:我不确定你的第一个新问题-只要FFTBufferManager
和CAStreamBasicDescription
都是c++类,它就应该工作得很好。至于第二个,取决于那行代码的确切位置(CAStreamBasicDescription thruFormat;
),您可能需要包括头文件,而不仅仅是前向声明:您在这里声明了CAStreamBasicDescription
的实例,编译器需要知道它的结构才能这样做。
一次不能声明多个类。
将你的声明改为
class CAStreamBasicDescription;
class FFTBufferManager;
编译器正在寻找unqualified-id
,因为它认为你声明了一个CAStreamBasicDescription
类型的变量,所以它期望变量名中给它一个逗号。
看起来您正在尝试创建一个已经存在于Cocoa框架中的类。
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 将超出范围的整数分配给有符号字符类型
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 类型的大小与无符号的等效项?
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 应用于无符号类型的一元减号运算符
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 在有符号基础类型枚举的位域上溢出
- C++,概念不适用于无符号整数作为结果类型?
- 函数指针给我"重新声明为不同类型的符号"错误
- 为什么 (-i) 的类型(其中 i 是无符号的 int)仍然是无符号的 int?
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 这种错误的原因是什么:将"功能"重新定义为不同类型的符号
- 为什么C++数组索引值是有符号的,而不是围绕size_t类型构建的(或者我错了)
- 什么是 16 字节有符号整数数据类型?
- 无符号类型和C++
- C++和无符号类型
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 重写基于模板类型符号的虚拟方法