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

标签 c++ enums static-methods

QT5 的新手只做了一点 C++。主要是 C#。无论如何,尝试制作一个枚举并在类的静态方法中使用它。类文件没有看到枚举(编译器错误是“未知类型名称 ActionNames”。尝试了一些东西,将枚举移出类,在 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

界面.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

最佳答案

您两次声明类的方式略有不同:一次在 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 "";
}

关于C++ 在静态方法中使用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54191336/

相关文章:

Java 枚举 - 返回字符串

matrix - 如何在实现中缀运算符时避免循环依赖

c++ - 使用 GDB 和 C++ 调试内存错误

c++ - 重载函数调用编译时常量

c# - 控制自定义属性

PHP静态函数在动态环境中调用

java - java中常用的接口(interface)方法实现

c++ - 在用户插入数据之前创建结构对象时,Vector 返回乱码

c++ - 这个 sizeof 表达式是如何计算的?为什么这样调用它?

c - C 枚举定义中的位移位有什么作用?