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

时间:2018-03-19 09:05:13

标签: c++ qt enums enumeration

我在一堂课中有一个枚举:

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

但是我得到了以下错误:

  

'SettingManager'未命名类型

我在BookManager

之前添加了SettingManager的前向删除
#include<settingmanager.h>
class SettingManager;
class BookManager : public NetworkManager
{
  private:    
     SettingManager::BookDisplayKinds m_BookDisplayKind;//Error is here
};

但现在我有以下错误

  'class SettingManager'中的'BookDisplayKinds'没有命名类型

3 个答案:

答案 0 :(得分:2)

您可以切换到自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;/
};

答案 1 :(得分:0)

有几种方法可以做到这一点。您可以include标题,其中&#39; SettingManager :: BookDisplayKinds&#39;被宣布。另一种方法可以是在同一类中声明SettingManager::BookDisplayKinds枚举。

答案 2 :(得分:0)

您没有向我们展示错误,例如您的包含路径中较早的类似标题。我尝试了你的代码(但是用缺少的标题完成了它):

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