myClass未在此范围内声明

时间:2016-08-20 10:49:23

标签: c++ qt scope

我基于QWidget类在Qt中创建了一个音乐播放器项目 并使用widget.ui表单。

我想检查用户是否会添加两个具有相同文本的标签,因此我尝试添加字段:QList labelsList; 在我的widget.h文件中。 (每次用户添加标签,而不是:labelsList.append(标签),并且在他可以添加此标签之前,程序将遍历labelsList并检查列表中是否存在带有心室文本的标签)。

虽然" myqlabel.h"包括在内,编译器说' myQLabel'没有在这个范围内宣布......我不知道为什么。对我来说有点奇怪,但也许我缺少/忘记了一些基本知识...; /

感谢您的帮助!

下面的代码(只需要片段):

widget.h文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "myqlabel.h"

#include <QList>
#include <QFormLayout>

#include <QSqlDatabase>
#include <QtSql>

#include <QMediaPlayer>


namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();


    // to check if label with input text already exists:

    // HERE OUR BAD FIELD:

    QList<myQLabel*> labelsList;



private:
    Ui::Widget *ui;
    QMediaPlayer player;

    qint64 duration;

};

#endif // WIDGET_H

myqlabel.h文件:

#ifndef MYQLABEL_H
#define MYQLABEL_H

#include <QLabel>
#include "widget.h"
#include "ui_widget.h"

#include <QFormLayout>
#include <QMouseEvent>

class myQLabel : public QLabel {

    Q_OBJECT
public:

    myQLabel(QString& text, QFormLayout* parent = 0) : QLabel(text){
        setAcceptDrops(true);
        position = amount;
        this->parent = parent;

        labelsList.append(this);
    }



};


#endif // MYQLABEL_H

1 个答案:

答案 0 :(得分:1)

您的包含中存在循环依赖关系。这意味着根据它们首次被包含的顺序而看不到其中一个标题(由于包括警戒)。

从widget.h中删除#include "myqlabel.h"并将其添加到widget.cpp。然后通过添加

转发声明myQLabel
class myQLabel;

到widget.h。