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 "";
}
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 "";
}