如何声明另一个类中的枚举

How declare an enum that is in another class?

本文关键字:枚举 另一个 何声明 声明      更新时间:2023-10-16

我在一个类中有一个枚举:

class SettingManager : public QObject
{
    Q_OBJECT
public:
    enum BookDisplayKinds{
        BookDisplay1=0,
        BookDisplay2=1,
    };
    Q_ENUMS(BookDisplayKinds)
};

我想在另一个类中声明一个属性

#include<settingmanager.h>
class BookManager : public NetworkManager
{
  private:    
     SettingManager::BookDisplayKinds m_BookDisplayKind;//Error is here
};

但我得到以下错误:

"设置管理器"未命名类型

我在簿记管理器之前添加设置管理器的前向妄想

#include<settingmanager.h>
class SettingManager;
class BookManager : public NetworkManager
{
  private:    
     SettingManager::BookDisplayKinds m_BookDisplayKind;//Error is here
};

但是现在我有以下错误

">

类设置管理器"中的"BookDisplayKinds"未命名类型

您可以切换到自 C++11 起可用的强枚举。我建议你把它放在课堂之外。

// SettingManager.h header
enum class BookDisplayKinds{
        BookDisplay1=0,
        BookDisplay2=1,
};
class SettingManager : public QObject
{
    Q_OBJECT
public:
};

现在可以像这样做一个前向声明:

// BookManager.h header
enum class BookDisplayKinds; // forward declaration
class BookManager : public NetworkManager
{
  private:    
     BookDisplayKinds m_BookDisplayKind;/
};

有几种方法可以做到这一点。您可以include声明"SettingManager::BookDisplayKinds"的标题。另一种方法是在同一类中向前声明SettingManager::BookDisplayKinds枚举。

您没有向我们显示一些错误,例如包含路径中前面的类似名称的标头。 我尝试了您的代码(但以缺少的标题完成了它(:

49359142.h

#include <QObject>
class SettingManager : public QObject
{
    Q_OBJECT
public:
    enum BookDisplayKinds{
        BookDisplay1=0,
        BookDisplay2=1,
    };
    Q_ENUMS(BookDisplayKinds)
};

49359142.cpp

#include "49359142.h"
class BookManager
{
  private:
     SettingManager::BookDisplayKinds m_BookDisplayKind;//Error is here
};
<小时 />

结果

nice make 49359142.o
g++-8 -std=c++2a -fPIC -g -Wall -Wextra -Wwrite-strings -Wno-parentheses -Wpedantic -Warray-bounds    -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/x86_64-linux-gnu/qt5   -c -o 49359142.o 49359142.cpp
Compilation finished at Mon Mar 19 09:31:59