簡體   English   中英

向前聲明同一類中的類型

[英]Forward declaration of types in the same class

我在一個類中有一個帶有一些簡單結構的類(簡化代碼):

typedef struct  
{
    Struct2* str2;
}Struct1;

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

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

當然,這給了我語法錯誤。 因此,我轉發了每個聲明,但這不起作用,因為那時我有重新定義。 我想避免將每個結構放在單獨的文件中; 那可能嗎?

不必將每個類型都聲明為typedef ,而應像使用類一樣使用struct關鍵字。 這樣,您的定義就不會看起來像前向聲明的重新定義。

struct Struct1;
struct Struct2;

struct Struct1
{
    Struct2* str2;
};  

使用前向聲明並在不使用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;
};

您可以像這樣向前聲明它們:

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

然后您可以解決它們:

struct Struct2 { ... };

我使用了命名結構,因此這是有效的C或C ++。 正如Nawaz所指出的那樣,在C ++中根本不需要typedef。 在C ++中,結構的名稱自動成為類型,但在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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM