标题,类和主要中的枚举

时间:2014-09-24 20:48:43

标签: c++ enums

我很困惑我可以在哪里定义枚举以及我可以在哪里使用它。我有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;

(我在这里概括了很多变量名,所以它可以适用于其他人的情况,如果有帮助我可以更详细地了解我自己的项目)

2 个答案:

答案 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声明)。在某些情况下,这可能很有用,但与您描述的内容无关。