Enums in headers, classes, and main
我对在哪里定义枚举以及在哪里使用枚举感到困惑。我有3个文件,一个main.cpp、function.cpp和function.h(名称已经简化)。在功能上,我有
1 2 3 4 5 6 7 | class Function{ public: enum Letters{A, B, C}; //more stuff not related private: //stuff } |
和function.h包含在main.cpp和function.cpp中
但是在main.cpp中,我希望有一个变量:letters letter;这样我就可以从用户那里获得输入,将输入设置为类型i.e letter=a,然后将其用于构造函数构造(…,letter,…),因为function.cpp中的构造函数需要参数中的"letters"。
那么有没有办法访问main.cpp中的"letters"类型?如果不是,我考虑重写构造函数,以便它接受"string letterin"参数,然后将字符串更改为类型,即if(letterin=="a")type=a;
(我在这里概括了很多变量名,这样它就可以应用于其他人的情况,如果有帮助的话,我可以更详细地介绍我自己的项目)
由于您希望在构造函数中使用枚举,我假设您可以将其公开。因此,您可以像这样访问它:
1 2 3 4 5 6 7 8 9 10 11 12 | class Function{ enum Letters{A, B, C}; //more stuff not related } int main(int argc, char** argv} { Function::Letters letter1 = Function::A; //or Function::Letters letter2 = Function::Letters::A; } |
或者,正如Medinoc指出的那样,如果您声明您的枚举为EDOCX1[0]
1 2 3 4 | int main(int argc, char** argv} { Function::Letters letter = Function::Letters::A; } |
号
你可以用很多方法做到。
您可以在声明类的头中声明它:
1 2 3 4 5 6 7 | class HasEnums { public: enum Letters { A, B, C }; ... HasEnums(Letters letter) { ... } }; |
然后在main.cpp中:
1 2 3 4 5 6 | #include"hasenums.h" HasENums::Letters letter = A; HasEnums h(letter); HasEnums i(HasENums::B); |
。
或者在头文件中,在类之外:
1 2 3 4 5 6 7 | enum Letters { A, B, C }; class NoEnums { public: NoEmums(Letters letter) { ... } }; |
然后主要是:
1 2 3 4 5 6 | #include"noenums.h" Letters letter = A; NoEnums n(letter); NoEnums m(B); |
。
还有许多其他可能的场景,但这两个场景似乎最合理,这取决于您实际想要描述的内容。在类中声明
还要注意,您可以制作一个私有的
1 2 3 4 5 6 7 | class HasPrivEnum { enum Letters { A, B, C }; ... public: HasPrivEnum(Letters letter) {...} }; |
。
但是现在您将无法编译在类外使用