I can't figure out what the actual problem is with this.
typedef struct _actor
{
...
} _actor, Actor;
class Actor
{
...
};
I get this weird error message actor.cpp:31: error: using typedef-name ‘Actor’ after ‘class’
.
Any idea what I did wrong here? Thank you :)
You are not allowed to define the symbol Actor
more than once. The typedef
statement already defines the symbol Actor
as an alias for struct _actor
before you attempt to declare a class with the same name.
I'm guessing you're using the gcc
compiler. I get the following errors when I compile with gcc
:
../src/main.cpp:113: error: using typedef-name ‘Actor’ after ‘class’
../src/main.cpp:111: error: ‘Actor’ has a previous declaration here
The first message (pointing the class Actor
line in the program) states that you cannot declare a class with a typedef-name
(Actor
is already declared using typedef
). The second message (pointing to the typedef struct _actor
line in the program) is a little clearer and refers to the multiple declarations for Actor
.
It is very common in C/C++ for a single class of error like this to result in multiple compiler errors and often the more helpful message is not the first reported.
To understand what going on, we need to break the first statement up into it's parts:
struct _actor
{
...
};
typedef struct _actor _actor;
typedef struct _actor Actor;
First we create a structure called _actor
. Next, we create a typedef for struct _actor
called _actor
. This is only useful in C. It allows us to say:
_actor myActor;
instead of
struct _actor myActor;
But in C++, it's unnecessary, as C++ allows us to use the first form natively, without the typedef.
The third line creates a second typedef for struct _actor
called Actor
.
When you then try to create a class named Actor
the compiler complains, as that name is already being used for the alias for the struct.
Now, it seems likely that in the original C code, the author had intended struct _actor
to be merely an implementation detail, and that you would always use just Actor
to refer to instances of this struct. Therefore, in your C++ code, you should probably eliminate the typedefs entirely, and just rename the struct. However, that will give you:
struct Actor {.....}
class Actor {.....}
So, prehaps you should look into merging those two classes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With