我很困惑我可以在哪里定义枚举以及我可以在哪里使用它。我有3个文件,一个main.cpp,function.cpp和function.h(名称已经简化)。在function.h中我有
class Function{
public:
enum Letters{A, B, C};
//more stuff not related
private:
//stuff
}
在main.cpp和function.cpp
中,function.h是#included然而在main.cpp中我想要一个变量:字母;所以我可以从用户那里得到一个输入,将输入设置为type = letter,然后将它用于构造函数Construct构造(...,letter,...),因为function.cpp中的构造函数需要一个“字母” “在论证中。
那么有没有办法访问main.cpp中的“Letters”类型?如果不是,我正在考虑重写构造函数,以便它接受“string letterIn”参数,然后将字符串更改为Type,即if(letterIn ==“A”)Type type = A;
(我在这里概括了很多变量名,所以它可以适用于其他人的情况,如果有帮助我可以更详细地了解我自己的项目)
答案 0 :(得分:2)
由于你想在构造函数中使用枚举,我假设你可以将它公开。因此,您可以像访问它一样访问它:
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指出的那样,如果您将枚举声明为enum class
int main(int argc, char** argv} {
Function::Letters letter = Function::Letters::A;
}
答案 1 :(得分:1)
你可以通过多种方式实现这一目标。
您可以在声明您的类的标头内声明它:
class HasEnums
{
public:
enum Letters { A, B, C };
...
HasEnums(Letters letter) { ... }
};
然后在main.cpp中:
#include "hasenums.h"
HasENums::Letters letter = A;
HasEnums h(letter);
HasEnums i(HasENums::B);
或在课堂外的头文件中:
enum Letters { A, B, C };
class NoEnums
{
public:
NoEmums(Letters letter) { ... }
};
然后在main:
#include "noenums.h"
Letters letter = A;
NoEnums n(letter);
NoEnums m(B);
还有许多其他可能的情况,但这两种情况似乎最合理,具体取决于您实际想要描述的内容。在类中声明Letters
的好处是你可以在另一个类中有另一个enum Letters
,并且当你需要noenums.h和新文件noenums2.h时,可以使用它们而不需要重命名。相同的编译单位。
另请注意,您可以制作私人enum
,但不能在课堂外使用:
class HasPrivEnum
{
enum Letters { A, B, C };
...
public:
HasPrivEnum(Letters letter) {...}
};
但是现在你无法编译在类之外使用HasPrivEnum::Letters
的代码(没有friend
声明)。在某些情况下,这可能很有用,但与您描述的内容无关。