我不知道这是什么实际问题。
typedef struct _actor
{
...
} _actor, Actor;
class Actor
{
...
};
Run Code Online (Sandbox Code Playgroud)
我收到这个奇怪的错误消息actor.cpp:31: error: using typedef-name ‘Actor’ after ‘class’。
知道我在这里做错了什么吗?谢谢 :)
不允许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
Run Code Online (Sandbox Code Playgroud)
第一条消息(指向class Actor的程序行)指出,你不能声明一个类typedef-name(Actor使用已声明typedef)。第二条消息(指向typedef struct _actor程序中的行)更加清晰,并指向的多个声明Actor。
在C / C ++中,像这样的一类错误会导致多个编译器错误,这是很常见的,而且更有用的消息通常没有首先得到报道。
为了理解发生了什么,我们需要将第一个语句分成几个部分:
struct _actor
{
...
};
typedef struct _actor _actor;
typedef struct _actor Actor;
Run Code Online (Sandbox Code Playgroud)
首先我们创建一个名为 的结构_actor。struct _actor接下来,我们为调用创建一个 typedef _actor。这仅在 C 中有用。它允许我们说:
_actor myActor;
Run Code Online (Sandbox Code Playgroud)
代替
struct _actor myActor;
Run Code Online (Sandbox Code Playgroud)
但在 C++ 中,这是不必要的,因为 C++ 允许我们本地使用第一种形式,而不需要 typedef。
第三行为被struct _actor调用的创建第二个typedef Actor。当您尝试创建一个名为的类时Actor,编译器会抱怨,因为该名称已被用作该结构的别名。
现在,在原始的 C 代码中,作者似乎struct _actor只想提供一个实现细节,并且您将始终使用它Actor来引用此结构的实例。因此,在您的 C++ 代码中,您可能应该完全消除 typedef,而只重命名该结构。然而,这会给你:
struct Actor {.....}
class Actor {.....}
Run Code Online (Sandbox Code Playgroud)
因此,您应该考虑合并这两个类。