myClass не объявлен в этой области

c++ qt scope

208 просмотра

1 ответ

Я делаю проект музыкального проигрывателя в Qt, основанный на классе QWidget и использующий форму widget.ui.

Я хочу убедиться, что пользователь не будет добавлять две метки с одинаковым текстом, поэтому я пытаюсь добавить поле: QList labelList; в моем файле widget.h. (каждый раз, когда пользователь добавляет метку, чем: labelList.append (label), и прежде чем он сможет добавить эту метку, программа перебирает labelList и проверяет, есть ли в списке метка с шаблонным текстом).

Хотя 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
Автор: WJuz Источник Размещён: 08.11.2019 11:12

Ответы (1)


1 плюс

Решение

У вас есть круговая зависимость в ваших включениях. Это означает, что один из заголовков не виден в зависимости от порядка, в котором они впервые включены (из-за включаемых охранников).

Удалите #include "myqlabel.h"из widget.h и добавьте его в widget.cpp. Затем вперед объявить myQLabel, добавив

class myQLabel;

на widget.h.

Автор: Peter K Размещён: 20.08.2016 11:07
Вопросы из категории :
32x32