未声明的标识符错误,包含正确的包含和声明

时间:2011-11-17 20:43:06

标签: c++ compilation include declaration

我正在Qt中创建一个应用程序 我得到一个编译错误:错误C2065:'callDialog':未声明的标识符 在我的CategoryDialog类中 错误行:

CallDialog* callDialog = ((CallDialog*)dialogStack->widget(1));

CategoryDialog类中的第5行:

    #include "ui_categorydialog_new.h"
    #include "calldialog.h"
    #include "questionsdialog.h"
    #include "../objects/call.h"
    #include "../webservice/dataconnector.h"
    #include "../webservice/dataconngetter.h"

    namespace Ui {
        class CategoryDialog;
    }

    class CategoryDialog : public QDialog
    {
        Q_OBJECT

    public:
        explicit CategoryDialog(QWidget *parent = 0) : QDialog(parent), ui(new Ui::CategoryDialog){
            ui->setupUi(this);
        }

        ~CategoryDialog()
        {
            delete ui;
        }

    private slots:
        void on_btn_back_clicked()
        {
            ui->btn_back->setEnabled(false);
            DataConnGetter::getConnector()->setCallAbort(call->getId()); //get errormessage back and show errormessage when nessesary
            QStackedWidget* dialogStack = (QStackedWidget*)this->parentWidget();
            CallDialog* callDialog = ((CallDialog*)dialogStack->widget(1)); //TODO 005 replace indexes with enums > more clear
            callDialog->updateCalls(false);
            dialogStack->setCurrentIndex(1);
            ui->btn_back->setEnabled(true);
        }

CallDialog类看起来像这样

    #include <QDialog>
    #include <QString>
    #include <QList>
    #include <QSound>
    #include <QtDebug>
    #include <QStringList>
    #include <QPushButton>
    #include <QStackedWidget>
    #include <QtAlgorithms>
    #include <QLabel>
    #include <typeinfo>

    #include "ui_calldialog.h"
    #include "callbutton.h"
    #include "categorydialog_new.h"
    #include "../settings/consts.h"
    #include "../webservice/dataconnector.h"
    #include "../webservice/dataconngetter.h"
    #include "../settings/programsettings.h"
    #include "../webservice/pollingservice.h"

    class PollingService;

    namespace Ui {
        class CallDialog;
    }

    class CallDialog : public QDialog
    {
        Q_OBJECT

    public:
        //    explicit CallDialog(QWidget *parent = 0);
        //    ~CallDialog();
        //    void initCalls();
        //    void updateCalls(bool sound);
        //    void enablePoller();

        explicit CallDialog(QWidget *parent = 0) : QDialog(parent), ui(new Ui::CallDialog)
        {
            ui->setupUi(this);
            installEventFilter(this);

注意CategoryDialog中的正确包含

他们确实包括彼此(可能是循环依赖问题?) 我尝试使用forward声明CallDialog。没有帮助。

文件只是直接在

内实现的.h文件

修改

我绕过了以下问题: 我添加了一个抽象类,其中包含CallDialog从CategoryDialog

中使用的函数 像这样:

#ifndef ABSTRACTDIALOG_H
#define ABSTRACTDIALOG_H

#include <QDialog>

#include "../objects/call.h"

class AbstractDialog : public QDialog
{
    Q_OBJECT

public:
    explicit AbstractDialog(QWidget *parent = 0) : QDialog(parent){}
    void setCall(Call* call){
        _call = call;
    }
private:
    Call* _call;

};

#endif // ABSTRACTDIALOG_H

1 个答案:

答案 0 :(得分:0)

由于使用了CategoryDialog成员函数并且编译器需要了解它们,因此在CallDialog之前声明CallDialog将无法正常工作。

您是否尝试在CategoryDialog之前声明CallDialog并删除,我猜是,#include "categorydialog_new.h"?由于未显示calldialog.h的全部内容,因此我不确定您在该文件中使用CategoryDialog的方式。