比较枚举的值会导致编译器错误

内核恐慌

我已经将C++ 枚举暴露Qt 5.7 QML,就像在这个问题中描述的那样,这里是类声明/实现:

#ifndef SPLASHSCREENLOGVIEWERMESSAGESTATUS_H
#define SPLASHSCREENLOGVIEWERMESSAGESTATUS_H

#include <QObject>
#include <QQmlEngine>

/**
 * @class Enum class for splash screen log viewer message status
 */
class SplashScreenLogViewerMessageStatus : public QObject
{
    Q_OBJECT

public:
    /**
     *! Splash screen log viewer message status enum
     */
    enum messageStatus
    {
        STATUS_MESSAGE_LOADING=0x01,               /*!< Message loading state */
        STATUS_MESSAGE_LOAD_OK=0x02,               /*!< Message load OK state */
        STATUS_MESSAGE_LOAD_FAILED=0x03            /*!< Message load FAILED state */
    };

    Q_ENUM(messageStatus)

public:
    /**
     * @brief Constructor
     */
    inline explicit SplashScreenLogViewerMessageStatus()
        : QObject()
    {
    }   // constructor

    /**
     * @brief QML type registration method
     */
    inline static void registerQMLType()
    {
        qmlRegisterType<SplashScreenLogViewerMessageStatus>("com.example",
                                                            1,
                                                            0,
                                                            "SplashScreenLogViewerMessageType");
    }   // registerQMLType
};  // SplashScreenLogViewerMessageStatus (class)

#endif // SPLASHSCREENLOGVIEWERMESSAGESTATUS_H

我在以下课程中使用它:

#ifndef SPLASHSCREENLOGVIEWERMODELRECORD_H
#define SPLASHSCREENLOGVIEWERMODELRECORD_H

#include <QString>

#include "splashscreenlogviewermessagestatus.h"

/**
 * @class Splash screen log viewer model record
 */
class SplashScreenLogViewerModelRecord
{
private:
    /**
     * @brief Message text
     */
    QString messageText;

    /**
     * @brief Message status object
     */
    SplashScreenLogViewerMessageStatus messageStatusObj;

public:
    /**
     * @brief Constructor
     */
    SplashScreenLogViewerModelRecord();

    /**
     * @brief Constructor
     */
    SplashScreenLogViewerModelRecord(const QString& messageText,
                                     const SplashScreenLogViewerMessageStatus& messageStatusObj);

    /**
     * @brief Message text getter
     * @return message text
     */
    QString getMessageText() const;

    /**
     * @brief Message text setter
     * @param text
     */
    void setMessageText(const QString& text);

    /**
     * @brief Message status getter
     * @return message status
     */
    QString getMessageStatus() const;

    /**
     * @brief Message status setter
     * @param status
     */
    void setMessageStatus(const SplashScreenLogViewerMessageStatus& status);
};

#endif // SPLASHSCREENLOGVIEWERMODELRECORD_H

和实施:

#include "splashscreenlogviewermodelrecord.h"

SplashScreenLogViewerModelRecord::SplashScreenLogViewerModelRecord()
{
    SplashScreenLogViewerMessageStatus messageStatus;

    this->setMessageText(QString(""));
    this->setMessageStatus(messageStatus);
}   // constructor

QString SplashScreenLogViewerModelRecord::getMessageText() const
{
    return this->messageText;
}   // getMessageText

void SplashScreenLogViewerModelRecord::setMessageText(const QString& text)
{
    this->messageText=text;
}   // setMessageText

QString SplashScreenLogViewerModelRecord::getMessageStatus() const
{
    if(this->messageStatusObj.messageStatus==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOADING)
    {
        return QString("Loading ...");
    }
//    else if(this->messageStatusObj.messageStatus==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOAD_OK)
//    {
//        return QString("Load OK.");
//    }
//    else if(this->messageStatusObj.messageStatus==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOAD_FAILED)
//    {
//        return QString("Load FAILED.");
//    }
    else
    {
        return QString("");
    };
}   // getMessageStatus

void SplashScreenLogViewerModelRecord::setMessageStatus(const SplashScreenLogViewerMessageStatus &status)
{
//    this->messageStatus.SplashScreenLogViewerMessageStatusEnum=status.SplashScreenLogViewerMessageStatusEnum;
//    this->messageStatus.messageStatus=status;
}   // setMessageStatus

如果我尝试使用这些文件构建项目,则会出现以下错误:

models/splashscreenlogviewermodelrecord.cpp: In member function ‘QString SplashScreenLogViewerModelRecord::getMessageStatus() const’: models/splashscreenlogviewermodelrecord.cpp:23:31: error: invalid use of ‘enum SplashScreenLogViewerMessageStatus::messageStatus’
     if(this->messageStatusObj.messageStatus ==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOADING)
                               ^~~~~~~~~~~~~ models/splashscreenlogviewermodelrecord.cpp:23:81: error: expected primary-expression before ‘.’ token
     if(this->messageStatusObj.messageStatus ==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOADING)

错误存在于 method 中QString SplashScreenLogViewerModelRecord::getMessageStatus() const,特别是在它的第一行:

if(this->messageStatusObj.messageStatus==SplashScreenLogViewerMessageStatus.STATUS_MESSAGE_LOADING)

我如何比较enum价值?Ubuntu 18.04.3 LTS 64bit使用Qt Creator 4.9.2

塞巴斯蒂安·雷德尔

摆脱所有的 Qt 混淆,剩下的大致是这样的:

class Foo {
public:
  enum fooValues { one, two };
};

void user(const Foo& foo) {
  if (foo.fooValues == Foo::one) {
    // doesn't compile
  }
}

这里的问题是它Foo::fooValues是一个嵌套类型,而不是一个成员变量您永远不会声明该类型的成员变量。

您被链接的答案稍微误导了,因为他们也不这样做。但他们也不试图以这种方式使用它。查看链接的问题,而不是关于您需要做什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

比较器 reversed() 导致编译器错误

具有actionBlock的宏会导致编译器错误

嵌套的“ static_for”会导致编译器错误

添加额外的常量会导致编译器错误

嵌套类结构会导致编译器错误

Swift:使用`var`会导致编译器警告,使用`let`会导致编译器错误?

枚举缺失导致编译器出错

错误的重载导致编译器错误

Dart枚举编译器错误

模板模板参数会导致Clang下的编译器错误,但不会导致GCC

编译器#warning:打印枚举值

Java 8升级导致继承了静态枚举的编译器错误

枚举和标识符列表的长度不匹配时,导致编译器错误

比较可变枚举成员变量时的Typescript编译器错误

DataBinding导致Kotlin编译器错误

记录枚举值会导致MikTex错误?

第三方库会导致“未定义的引用”编译器错误?

为什么将基类用于方法引用会导致编译器错误

使用打字稿和babel-polyfill会导致编译器错误

为什么此嵌套的通用类型转换会导致编译器错误

理解产量会导致类型不匹配的编译器错误

C ++使用匿名对象调用函数会导致编译器错误

在Window上设置设计时间DataContext会导致编译器错误?

在switch语句中定义块会导致编译器错误

在C ++程序中使用libcurl会导致Visual C ++编译器发出错误

静态类方法重载使用会导致编译器错误

在人造丝线程中调用`Arc :: new()`会导致垃圾编译器错误

使用编译器选项生成d.ts文件会导致角度错误

为什么编译器会导致“处理时检测到循环......”的错误?