C++ 错误:在类后使用typedef名称

C++ 错误:在类后使用typedef名称,c++,class,typedef,C++,Class,Typedef,我不知道这到底是什么问题 typedef struct _actor { ... } _actor, Actor; class Actor { ... }; 我收到一条奇怪的错误消息actor.cpp:31:错误:在“class”之后使用typedef名称“actor” 知道我做错了什么吗?谢谢:)您不能多次定义符号Actor。在您尝试声明具有相同名称的类之前,typedef语句已经将符号Actor定义为struct\u Actor的别名 我猜您正在使用gcc编译器。当我使用gc

我不知道这到底是什么问题

typedef struct _actor
{
   ...
} _actor, Actor;

class Actor
{
   ...
};
我收到一条奇怪的错误消息
actor.cpp:31:错误:在“class”之后使用typedef名称“actor”


知道我做错了什么吗?谢谢:)

您不能多次定义符号
Actor
。在您尝试声明具有相同名称的类之前,
typedef
语句已经将符号
Actor
定义为
struct\u Actor
的别名

我猜您正在使用
gcc
编译器。当我使用
gcc
编译时,会出现以下错误:

../src/main.cpp:113: error: using typedef-name ‘Actor’ after ‘class’
../src/main.cpp:111: error: ‘Actor’ has a previous declaration here
第一条消息(指向程序中的
class-Actor
行)指出,不能使用
typedef-name
声明类(
Actor
已使用
typedef
声明)。第二条消息(指向程序中的
typedef struct\u actor
行)更清楚一些,它引用了
actor
的多个声明


在C/C++中,这样的一类错误导致多个编译器错误是很常见的,而且通常更有用的消息不是第一次报告的。

要了解发生了什么,我们需要将第一条语句分解为以下几部分:

struct _actor 
{ 
   ... 
};

typedef struct _actor _actor;
typedef struct _actor Actor; 
首先,我们创建一个名为
\u actor
的结构。接下来,我们为
struct\u actor
创建一个名为
\u actor
的typedef。这只在C中有用。它允许我们说:

  _actor myActor;
而不是

 struct _actor myActor;
<>但是在C++中,没有必要,因为C++允许我们原生使用第一个形式,而没有TyPulf.< /P> 第三行为
struct\u actor
创建第二个typedef,称为
actor
。 然后,当您尝试创建名为
Actor
的类时,编译器会抱怨,因为该名称已用于结构的别名

现在,在最初的C代码中,作者希望
struct\u actor
仅仅是一个实现细节,而您总是使用
actor
来引用这个结构的实例。因此,在C++代码中,您可能应该完全删除Type Debug,而只是重命名Struts。但是,这将为您提供:

 struct Actor {.....}
 class  Actor {.....}

因此,您应该考虑合并这两个类。

对于arduino hectop 3d打印机:


SdBaseFile.h
SdBaseFile.cpp
中的
fpos_t
变量重命名为另一个名称,如
fpos_t1
并重新编译。

您能详细说明一下吗?我对此还是有点陌生。@Boco:简单地说,您正在尝试创建两个同名的不同类型。谢谢:)。删除这个角色,在结尾似乎已经解决了这个问题。但是,我不明白为什么你使用Type Debug .BTW,TyBeIFF StULTE构件只在C中使用,其中结构名称和其他类型的名称驻留在不同的命名空间中(不是C++的意图);在C++中,Struts和类名可以使用“正常”,所以这个C-TyWIFF习惯用语是不必要的。我将走到一个肢体上,猜测你在错误消息中得到了这些字符,因为你正在使用P腻y,并且需要将“收到的数据假设为哪一个字符集”选项给UTF-8。