2011-05-07 25 views
4

我有一個類,我讓我在類的上面使用線程。即使我做了一個原型類的它仍然拋出了這些錯誤 錯誤C2027上:使用未定義的類型「富」C++類使用undefined類型

class foo; 

DWORD WINAPI demo(LPVOID param) 
{ 
    foo a; 
} 


class foo 
{ 
public: 
int x; 
}; 

回答

9

即使我做了一個原型的 類

使用該類的forward declaration,您可以創建指向該類的指針和引用。這是因爲指針/引用在所有類/結構體/等中表示相同。他們都只是記憶的地址。因此,舉例來說,你可以創建一個第二類是可以接受或含有指針或引用完全定義的類之前,即:

class Bar 
    { 
    private: 
     foo* aFoo; 
    public: 
     Bar(foo* foo2) : aFoo(foo2) {} 
    }; 

然而,直到編譯器看到類的全定義,你不能實例化它。否則,編譯器不知道要分配多少內存以及如何調用構造函數和其他方法。在大多數情況下,C++希望在使用之前對其進行定義。前向聲明可以讓你解決這個問題,因爲任何類的指針和引用都是相同的。所以你可以向編譯器做出承諾,以後你會完全定義它。

+0

因此,在所有情況下都無法獲得在其定義的類或結構之前使用的類或結構? – Drake 2011-05-07 01:52:04

+0

@Anon,是的,這是真的 – 2011-05-07 01:57:49

+0

@Anon:正確。這是一個類比:類定義就像某種類型對象的藍圖。沒有藍圖,編譯器不可能知道如何生成創建該類型對象的代碼。在完全定義其類之前實例化對象就像建造沒有完全定義的藍圖的房子。 – 2011-05-07 01:58:57