myClass没有在这个作用域中声明



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

我想检查用户不会添加两个具有相同文本的标签,所以我试图添加字段:在我的widget.h文件中。(每次用户添加标签时,than: labelsList.append(label),在他添加这个标签之前,程序将遍历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

你的include中有一个循环依赖。这意味着其中一个头文件不会被看到,这取决于它们第一次被包含的顺序(由于包含保护)。

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

向前声明myQLabel
class myQLabel;
widget.h

最新更新