2013-01-04 68 views
1

我有一個頭,它包括一個原型的結構的:結構原型

struct UserDataStruct; 

爲標頭中的源文件中包含的,包括用於報頭和:

struct UserDataStruct 
{ 
    int instance; 
}; 

以我主源文件,我有:

int main() 
{ 
    UserDataStruct lol; 

    return 0; 
} 

我似乎無法編譯我的程序,因爲Visual Studio 2010給了我一個e rror:

error C2079: 'lol' uses undefined struct 'UserDataStruct' 

我該如何做這項工作?

+0

我很確定我不能包含源.cpp文件。 – GILGAMESH

+0

「原型」是一個函數聲明; 'struct UserDataStruct;'是一個不完整類型的聲明。 –

回答

2

UserDataStruct的完整定義需要在創建實例之前進行。在這種情況下,前向聲明是不夠的。

只需將您的結構定義從.cpp文件移動到標題。

+0

是否需要.cpp文件? – GILGAMESH

+0

@GilgameshOfUruk如果你擁有的只是一個結構體定義,那麼不是。函數定義仍然應該放在.cpp文件中。 – Pubby

+0

@GilgameshOfUruk此外,您不必每次都包含標題 - 在某些情況下,前向聲明將起作用。 – Pubby

0

這是行不通的;該結構需要在main()中完全知道;你必須將你的結構的完整聲明放在頭文件中,然後將它包含在主要的.c文件中。

你只能向前聲明結構/聯合/班(因爲這是你在做什麼),如果你使用其他頭文件指針。但最終你將不得不在你的.c文件中提供完整的聲明。你不能「隱藏」你的結構的內部。