错误:在课后使用typedef-name

时间:2010-09-22 18:58:26

标签: c++ class typedef

我无法弄清楚实际问题是什么。

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

class Actor
{
   ...
};

我收到这个奇怪的错误消息actor.cpp:31: error: using typedef-name ‘Actor’ after ‘class’

知道我在这里做错了吗?谢谢:))

3 个答案:

答案 0 :(得分:4)

您不能多次定义符号Actor。在您尝试声明具有相同名称的类之前,typedef语句已将符号Actor定义为struct _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 _actor行)更清晰,并引用Actor的多个声明。

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

答案 1 :(得分:4)

为了理解发生了什么,我们需要将第一个声明分解为它的部分:

struct _actor 
{ 
   ... 
};

typedef struct _actor _actor;
typedef struct _actor Actor; 

首先,我们创建一个名为_actor的结构。接下来,我们为名为struct _actor的{​​{1}}创建一个typedef。这仅适用于C.它允许我们说:

_actor

而不是

  _actor myActor;

但是在C ++中,它是不必要的,因为C ++允许我们在不使用typedef的情况下本地使用第一种形式。

第三行为名为 struct _actor myActor; 的{​​{1}}创建第二个typedef。 然后,当您尝试创建一个名为struct _actor的类时,编译器会抱怨,因为该名称已用于结构的别名。

现在,似乎在最初的C代码中,作者希望Actor仅仅是一个实现细节,并且你总是只使用Actor来引用这个结构的实例。因此,在您的C ++代码中,您应该完全消除typedef,只需重命名结构。但是,这会给你:

struct _actor

所以,你应该考虑合并这两个类。

答案 2 :(得分:0)

用于arduino百万台3D打印机:

fpos_tSdBaseFile.h中的SdBaseFile.cpp个变量重命名为fpos_t1等其他名称并重新编译。