C++ 在静态方法中使用枚举

C++ Using Enum with Static Method

QT5 新手只学过一点 C++。主要是 C#。无论如何,尝试制作一个枚举并在 class 中的静态方法中使用它。 class 文件没有看到枚举(编译器错误是 "unknown Type name ActionNames."。尝试了一些东西,将枚举移出了 class,在 cpp 文件中的 ViewNames 前面使用 Gui:: .我敢肯定这是一件很容易的事情-但是我该怎么做呢?谢谢。

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

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

这两个 class 的区别在于枚举定义没有在 gui.cpp 中的 class 中声明。

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

所以这意味着 gui.cpp 中的 class 被使用,gui.h 中的被忽略,但枚举未在 [=33 中声明=] in 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 "";
}

大疏忽 - 再次 class 包含 cpp 文件...糟糕...谢谢大家。

#include "Gui.h"

Gui::Gui()
{

}

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

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