2013-01-04 44 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文件中提供完整的声明。你不能“隐藏”你的结构的内部。