我已经开始阅读C ++了,我对类型为Enum和Struct的成员变量有疑问。我应该在哪里声明Enums / Structs,以便在将标题和实现文件分开时可以将它们用作成员变量?而且,我如何在C ++类中创建最终成员变量?我在添加const int myTest
作为成员变量时遇到编译错误,我应该在哪里初始化它们?
答案 0 :(得分:5)
头文件就像一个人说'我可以做到这一点,那个和另一个' - 所以把声明放进去 - 枚举,结构,类声明,常量,......
实现文件就像一个人说'我能做到这一点,这就是我能做到的' - 它产生了一个配方 - 实际的机器代码让CPU紧缩。
const
说 - 不要改变我。要在你需要的课堂上初学者:
class X
{
private:
const int y;
public:
X() : y(5) {}
};
例如,。如果你正在学习C ++ const
是一个非常有用的工具,可以防止你犯很多错误。
答案 1 :(得分:3)
最简单的解决方案是简单地声明枚举和放大器。在他们所属的班级之前直接结构:
struct Gizmo
{
int n_;
};
class Foo
{
public:
Gizmo gizmo_;
};
如果Gizmo
在逻辑上耦合到Foo
(例如,如果您在使用Gizmo
的上下文之外永远不会使用Foo
),那么它也可能有意义使Gizmo
成为嵌套类:
class Foo
{
public:
struct Gizmo
{
int n_;
};
Gizmo gizmo_;
};
如果要实例化以这种方式声明的Gizmo
,您可以自行解决范围:
Foo::Gizmo gizmo;
最后,如果Gizmo
和Foo
没有逻辑耦合,并且您可以在不需要Gizmo
的情况下使用Foo
,那么它可能属于它自己的头文件。
struct Gizmo
{
int n_;
};
#include "gizmo.h"
class Foo
{
public:
Gizmo gizmo_;
};
答案 2 :(得分:3)
我应该在哪里声明枚举/结构,以便在分隔标题和实现文件时可以将它们用作成员变量?
你必须在使用前声明它们,即。在类型的类中声明成员之前。之一:
#include
该文件(在您的类声明之前)我在将const int myTest作为成员变量添加时遇到编译错误,我应该在哪里初始化它们?
在构造函数中,使用初始值设定项。即:
Clazz::Clazz() : my_const_var(0) { ... }
答案 3 :(得分:1)
如果要将枚举或结构添加为类的成员变量,则在声明成员之前必须完成枚举或结构的定义。这可以在类中,在类之外,但在.h标题之前,或者在当前之前或之内包含的不同.h标题中。
将成员变量声明为const应该没有任何问题,但是它对必须如何初始化的方式设置了限制。您必须在构造函数的初始化列表中执行此操作。
MyClass::MyClass() : myTest(value)
{
}