[英]unknown type name C vs C++
我試圖創建一個包含指向其類型的指針的結構:
#include <stdio.h>
struct test{
test* t;
};
int main(){
return 0;
}
使用gcc編譯時,此代碼產生了一個錯誤:
:5:2:錯誤:未知類型名稱“ test”
但是在g ++上編譯時,一切正常。
所以我想了解的是:
1)是什么原因導致這種差異? 我認為如果gcc使用一次編譯,而g ++使用多次編譯可以解釋這一點,但是據我了解,事實並非如此。
2)如何避免此錯誤,並使用指向其自身類型的指針定義結構? (除非沒有其他選擇,否則我不想使用void *或使用強制類型轉換)
您必須在test * t之前編寫struct才能定義指向我們的struct的指針:
struct test* t;
這是C和C ++之間的區別。
您的語法在“ C”中不正確。 您必須使用struct <structname>* <varname>;
格式。
在c ++中,可以省略其前面的“結構”。 但是,在C語言中,必須編寫它才能定義指向結構的指針。
固定代碼:
#include <stdio.h>
typedef struct test{
struct test* t;
} test;
int main(){
return 0;
}
您需要typedef
struct test
test
;
在以這種方式使用它之前。
這應該可以正常工作:
#include <stdio.h>
struct test{
struct test* t;
};
int main(){
return 0;
}
或者您可以嘗試:
#include <stdio.h>
typedef struct test test;
struct test{
test* t;
};
int main(){
return 0;
}
您的問題是gcc是C編譯器,並且按字面意義接受類型。 如果使用c ++編譯器,則可能不會在意。 C ++可以為您簡化C的類型。 請注意這一事實。 C代碼將在c ++編譯器中編譯,但c ++將不在ac編譯器中編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.