2010-04-05 100 views
6

是否应该在头文件中声明所有的结构和类?如果我在源文件中声明一个结构体/类,那么我需要在头文件中放置什么,以便可以在其他文件中使用它?另外,是否有任何资源显示了C++的一些标准实践?哪里申报结构等?

回答

5

应该在头文件中声明所有结构体和类吗?
是的。编辑:但他们的实现应该在cpp文件中。有时,来自C#或Java的用户不会意识到C++中的实现可以完全独立于类声明。

如果我在一个源文件中声明一个结构体/类,我需要在头文件中放入什么,以便它可以在其他文件中使用?
你不能。编译器需要在使用该类的任何翻译单元中提供的类的完整声明。

此外,是否有任何资源显示C++的标准做法?
你可以下载任何数量的开源应用程序的源代码来查看。虽然你可能会看到唯一完全一致的东西,那就是使用标题守护进程,并在头文件中保存所有的声明。

+4

如果没有在其他源文件中使用它的结构,则结构不必是头文件。为STL算法编写的函子就是这样一个例子。 – Naveen 2010-04-05 12:57:05

+3

我使用了很多结构体,它们都是实现细节 - 在.cpp文件中声明 – 2010-04-05 13:02:45

+1

-1 Naveen和Neil都给出了为什么不应该在头文件中声明* ALL *结构体的原因。 OP的问题给出了一个误导性的答案,特别是对于新手来说。 – 2010-04-05 13:10:48

2

头文件的要点是声明要在其他源文件之间共享的接口。通常,人们在头文件中声明抽象类型,并根据需要在源文件中实现它们。这意味着,当然新实现的类型只能用于特定的源文件。如果你需要跨多个文件使用类型(通常是这种情况),那么你需要使用头文件。

C++ faq通常是最佳实践的重要资源。