我无法弄清楚实际问题是什么。
typedef struct _actor
{
...
} _actor, Actor;
class Actor
{
...
};
我收到这个奇怪的错误消息actor.cpp:31: error: using typedef-name ‘Actor’ after ‘class’
。
知道我在这里做错了吗?谢谢:))
答案 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_t
和SdBaseFile.h
中的SdBaseFile.cpp
个变量重命名为fpos_t1
等其他名称并重新编译。