如何声明另一个 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
我有一个枚举 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