我在一堂课中有一个枚举:
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'没有命名类型
答案 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