C ++ Использование Enum со статическим методом - PullRequest
0 голосов
/ 15 января 2019

новичок в QT5 сделал только немного C ++. В основном C #. в любом случае, пытаясь создать перечисление и использовать его в статическом методе в классе. файл класса не видит enum (ошибки компилятора "неизвестны Имя типа ActionNames.". попробовал несколько вещей, переместив enum из класса, используя Gui :: перед ViewNames в файле cpp и т. д. Я уверен, что это это довольно простая вещь - но как я могу это сделать? спасибо.

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 голосов
/ 15 января 2019

большой недосмотр - файл cpp снова включил класс ... упс ... спасибо всем.

#include "Gui.h"

Gui::Gui()
{

}

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

static std::string GetActionStringFor(Gui::ActionNames view)
{
    return "";
}
0 голосов
/ 15 января 2019

Вы объявили класс дважды немного по-другому: один раз в gui.cpp и один раз в gui.h

Разница в этих двух классах заключается в том, что определения enum не объявлены в классе в 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 "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...