在同一类中转发类型的声明

时间:2011-05-05 20:27:58

标签: c++

我有一个类,在类中有一些简单的结构(简化代码):

typedef struct  
{
    Struct2* str2;
}Struct1;

typedef struct  
{
    Struct3* str3;
    Struct1* str1;
}Struct2;

typedef struct  
{
    Struct1* str1;
    Struct2* str2;
    Struct3* str3;
}Struct3;

当然,这给了我语法错误。所以我转发声明每一个,但这不起作用因为我有重新定义。我想避免将每个结构放在一个单独的文件中;那可能吗?

3 个答案:

答案 0 :(得分:5)

不要将每个类型声明为typedef,而是像使用类一样使用struct关键字。那么你的定义看起来不像是对前向声明的重新定义。

struct Struct1;
struct Struct2;

struct Struct1
{
    Struct2* str2;
};  

答案 1 :(得分:1)

使用前向声明并定义结构而不使用typedef,如下:

struct Struct2; //forward declaration
struct Struct3; //forward declaration

struct Struct1
{
    Struct2* str2; //here Struct2 is known to be a struct (to be defined later though)
};

struct Struct2
{
    Struct3* str3; //here Struct3 is known to be a struct (to be defined later though)
    Struct1* str1;
};

struct Struct3
{
    Struct1* str1;
    Struct2* str2;
    Struct3* str3;
};

答案 2 :(得分:0)

你可以像这样向前声明:

typedef struct Struct1 Struct1;
typedef struct Struct2 Struct2;
typedef struct Struct3 Struct3;

你解决了这个问题:

struct Struct2 { ... };

我使用了命名结构,所以这是有效的C或C ++。正如Nawaz指出的那样,在C ++中根本不需要typedef。在C ++中,struct的名称自动成为一个类型,但在C中它不是。

这是整个单位:

#include <stdio.h>

typedef struct Struct1 Struct1;
typedef struct Struct2 Struct2;
typedef struct Struct3 Struct3;

struct Struct1  {
        Struct2* str2;
} ;

struct Struct2 {
        Struct3* str3;
        Struct1* str1;
} ;

struct Struct3  {
        Struct1* str1;
        Struct2* str2;
        Struct3* str3;
} ;

int main()
{
        printf("Size of Struct1: %d\n", sizeof(Struct1));
        printf("Size of Struct2: %d\n", sizeof(Struct2));
        printf("Size of Struct3: %d\n", sizeof(Struct3));
}