如果我有类似的东西:
enum
{
kCP_AboutBox_IconViewID = 1,
kCP_AboutBox_AppNameViewID = 2,
kCP_AboutBox_VersionViewID = 3,
kCP_AboutBox_DescriptionViewID = 4,
kCP_AboutBox_CopyrightViewID = 5
};
Run Code Online (Sandbox Code Playgroud)
在我的.cpp中可以进入.h吗?
更重要的是,除了类定义,变量等之外,还可以将其他更少的知识放入.h中
IAm*_*dge 41
.h文件本质上只是代码,在编译时,它被放在任何.cpp(或者.h文件)的上面.它因此你只需将.cpp文件中的任何代码放入.h文件中.它应该编译好.
然而,这是重要的设计.您的代码(例如您的枚举)应该放在.h文件中,如果您需要将它暴露给您包含.h文件的代码.但是,如果枚举仅特定于头文件.cpp实现中的代码,那么您应该将其封装在.cpp文件中.
是的,您的枚举定义可以放在您的头 ( .h) 文件中。但是,不要在.cpp文件中重复定义。
请记住在标题中使用标题包含警卫,例如:
#ifndef header_name_h
#define header_name_h
...
#endif
Run Code Online (Sandbox Code Playgroud)
这有助于您在多个标头包含标头时保持一个定义规则.
更新:
我发现最新版本的Visual Studio 和 gcc都允许:
#pragma once
Run Code Online (Sandbox Code Playgroud)
此外,从未有过:
using namespace <name>;
Run Code Online (Sandbox Code Playgroud)
在标题中,这可能会导致奇怪的歧义问题.
小智 5
通常,枚举将用作类型定义,并且应始终位于头文件中。需要考虑的是它的范围。
如果枚举只是放在头文件中的任何范围之外,那么它对于包含头文件的任何事物都是全局可用的。如果您希望枚举只能由类本身访问,您可以将它放在类的私有部分。
通常,您不应将枚举设为全局范围,而应将其放在命名空间或类的公共部分中。然后您可以通过以下方式访问枚举
NamespaceOrClass::EnumValue
Run Code Online (Sandbox Code Playgroud)
此外,作为旁注,枚举会自动从您提供的第一个值(或 0)开始迭代值。
enum
{
kCP_AboutBox_IconViewID = 1,
kCP_AboutBox_AppNameViewID = 2,
kCP_AboutBox_VersionViewID = 3,
kCP_AboutBox_DescriptionViewID = 4,
kCP_AboutBox_CopyrightViewID = 5
};
Run Code Online (Sandbox Code Playgroud)
完全一样
enum
{
kCP_AboutBox_IconViewID = 1,
kCP_AboutBox_AppNameViewID,
kCP_AboutBox_VersionViewID,
kCP_AboutBox_DescriptionViewID,
kCP_AboutBox_CopyrightViewID
};
Run Code Online (Sandbox Code Playgroud)
这不是问题或错误,只是风格而已。