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

How declare an enum that is in another class?

我有一个枚举 class :

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

我想在另一个 class

中声明一个 属性
#include<settingmanager.h>
class BookManager : public NetworkManager
{
  private:    
     SettingManager::BookDisplayKinds m_BookDisplayKind;//Error is here
};

但我遇到以下错误:

'SettingManager' does not name a type

我在 BookManager 之前添加了 SettingManager 的前向调用

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

但现在我有以下错误

'BookDisplayKinds' in 'class SettingManager' does not name a type

有几种方法可以做到这一点。您可以 include 声明 'SettingManager::BookDisplayKinds' 的 header。另一种方法可以在同一个 class.

中向前声明 SettingManager::BookDisplayKinds 枚举

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

之外
// 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;/
};

有些错误您没有向我们展示,例如包含路径中较早的 similar-named header。我试过你的代码(但用缺少的 headers 完成了它):

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