C ++“未在此范围内声明”编译错误

时间:2013-02-22 05:48:01

标签: c++

我是C ++和QT的新手,我正在使用QT Creator,我创建了一个名为nGui的QT Widget项目,添加了一个名为mydlg的QT-QT Designer表单类,我一直在尝试创建一个按钮窗口,当您单击它时打开另一个窗口,而原始窗口一直显示。这是我的代码,但它总是显示错误:'my2'未在此范围内声明。我已经在widget.h中声明了'my2',并且我在mydlg.cpp中包含了widget.h文件,我不知道哪里出错了,有人可以帮帮我吗?非常感谢你!

mydlg.cpp

#include "mydlg.h"
#include "ui_mydlg.h"
myDlg::myDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::myDlg)

{
     ui->setupUi(this);
}

myDlg::~myDlg()

{

    delete ui;

}


void myDlg::on_pushButton_clicked()

{

     my2.show();

}

widget.h

#ifndef WIDGET_H

#define WIDGET_H

#include <QWidget>

#include"mydlg.h"

namespace Ui 
{
    class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

    private:
    Ui::Widget *ui;
    myDlg my2;
    private slots:
    void on_pushButton_clicked();
};

 #endif // WIDGET_H

的main.cpp

#include <QtGui/QApplication>

#include "widget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

2 个答案:

答案 0 :(得分:0)

my2Widget类中声明,但您尝试在myDlg类的成员函数中访问它。

答案 1 :(得分:0)

尝试将my2.show()替换为show() 当您在myDlg类中编写时,您正在编写可以从该类实例化的每个对象的行为(包括my2)。

然后在my2类中引用MyDlg是没有意义的,因为使用您的类的其他人可以改为使用它来实例化另一个名为(例如)my3的对象。你想要做的是告诉编译器何时在类_pushButton_clicked()的对象上调用MyDlg时,在同一个对象上调用show()函数。您可以通过撰写this->show()或简单show()来完成此操作。