我有一个结构定义如下:
typedef struct {
string foo;
} A, B;
我还有一组功能如下:
void Init(A *p) {
p->foo;
}
void Init(B *p) {
p->foo;
}
gcc抱怨说正在重新定义Init。我可以简单地删除第二个Init函数吗?是否与B的类型相同?
答案 0 :(得分:5)
是的,A和B 基本上只是同一类型的不同别名。
我认为如果给结构本身命名,代码会更清楚,并将Init
定义为一个带结构指针的函数:
struct MyStruct{
string foo;
};
typedef MyStruct A, B;
void Init(MyStruct *p) {
p->foo;
}
然而,这只是个人偏好。
答案 1 :(得分:1)
是。 B是结构定义
中定义的A的别名答案 2 :(得分:1)
他们都是一样的。在C中,因为它们在结构上是相同的,
在C ++中,因为A
被视为类型的名称
联系目的;这和你写的几乎一样:
struct A { string foo; };
typedef A B;