[英]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.