2008-08-29 86 views
2

我編譯在Visual C++進行編譯的C代碼(/ TC) 簡單.c和我得到這個編譯器錯誤編譯器錯誤C2143使用結構

錯誤C2143時:語法錯誤:缺少';'之前,對於一個簡單的結構

struct foo test; 

同樣適用於使用結構的類型定義調用線「類型」

錯誤C2275:「富」:非法使用這種類型作爲表達

回答

6

我忘了在C中你必須在任何代碼之前聲明所有的變量。

+0

看起來像我有同樣的問題。 – user58670 2009-03-12 00:59:44

1

你不小心忽略分號在上一行?如果上一行是#include,則可能需要在別處查找缺少的分號。

編輯:如果其餘的代碼是有效的C++,那麼可能沒有足夠的信息來確定問題是什麼。也許你可以將你的代碼發佈到pastebin,這樣我們就可以看到整個事情。

理想情況下,在使它變小以便發佈的過程中,它會突然開始工作,然後您將發現問題!

0

你的結構類型是如何定義的?有兩種方法可以做到這一點:

// This will define a typedef for S1, in both C and in C++ 
typedef struct { 
    int data; 
    int text; 
} S1; 

// This will define a typedef for S2 ONLY in C++, will create error in C. 
struct S2 { 
    int data; 
    int text; 
}; 
1

因爲你已經做了一個結構類型定義(因爲你使用了「S1」的版本),你應該寫:

foo test; 

,而不是

struct foo test; 

這將在C和工作的C++

0

C2143基本上說,編譯器有一個令牌ŧ在當前情況下它認爲是非法的帽子。這個錯誤的含義之一是在觸發編譯器錯誤的行之前可能存在實際問題。正如Greg所說,我認爲我們需要看到更多的代碼來診斷這個問題。

我也不確定爲什麼你認爲這是有效的C++代碼是有幫助的,當試圖找出它爲什麼不編譯爲C? C++(很大程度上)是C的超集,所以有許多理由可以說明爲什麼有效的C++代碼可能在語法上不正確C代碼,尤其是C++將結構視爲類!