C ++将枚举与静态方法结合使用

时间:2019-01-15 00:58:07

标签: c++ enums static-methods

QT5的新功能只做了一点C ++。主要是C#。无论如何,尝试创建一个枚举并在类的静态方法中使用它。类文件看不到枚举(编译器错误是“未知的类型名称为ActionNames。”。尝试了一些操作,将枚举移出类,使用Gui ::在cpp文件中的ViewNames前面。我确定是这样很简单-但是我该怎么做?谢谢。

Gui.h

#ifndef GUI_H
#define GUI_H

#include <QObject>

class Gui
{
public:
    Gui();

    enum ViewNames
    {
    MAIN_VIEW,
    WORK_VIEW
    };

    enum ActionNames
    {
    BACK,
    HOME
    };
    static std::string GetViewStringFor(ViewNames view);
    static std::string GetActionStringFor(ActionNames view);
};

#endif // GUI_H

Gui.cpp

#ifndef GUI_H
#define GUI_H

#include <QObject>

#include "Gui.h"

class Gui
{
public:
    Gui();

    static std::string GetViewStringFor(ViewNames view)
    {
        return "";
    }
    static std::string GetActionStringFor(ActionNames view)
    {
        return "";
    }
};

#endif // GUI_H

2 个答案:

答案 0 :(得分:1)

您两次声明了该类,略有不同:一次在gui.cpp中,一次在gui.h中

这两个类的区别在于,枚举定义不在gui.cpp的类中声明。

您的gui.cpp文件定义了GUI_H符号,然后包括gui.h,它检查GUI_H符号。因为它不存在,所以gui.h中不包含任何内容。

因此,这意味着使用了gui.cpp中的类,而忽略了gui.h中的类,但是在gui.cpp中的类中未声明枚举,因此编译器找不到它们

要解决此问题,请像这样更改gui.cpp:

#include <QObject>
#include "Gui.h"

Gui::Gui()
{
}
static std::string Gui::GetViewStringFor(Gui::ViewNames view)
{
    return "";
}
static std::string Gui::GetActionStringFor(Gui::ActionNames view)
{
    return "";
}

答案 1 :(得分:0)

大监督-cpp文件再次包含了类。。。谢谢大家。

#include "Gui.h"

Gui::Gui()
{

}

static std::string GetViewStringFor(Gui::ViewNames view)
{
    return "";
}

static std::string GetActionStringFor(Gui::ActionNames view)
{
    return "";
}