以下结构是否相同?

时间:2012-01-31 18:53:20

标签: c++

我有一个结构定义如下:

typedef struct {
    string foo;
} A, B;

我还有一组功能如下:

void Init(A *p) {
    p->foo;
}
void Init(B *p) {
    p->foo;
}

gcc抱怨说正在重新定义Init。我可以简单地删除第二个Init函数吗?是否与B的类型相同?

3 个答案:

答案 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;