簡體   English   中英

未知類型名稱C vs C ++

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

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