2013-02-22 3 views
1

저는 C++과 QT를 처음 사용하고 QT Creator를 사용하고 nGui라는 QT 위젯 프로젝트를 만들고 mydlg라는 QT-QT 디자이너 폼 클래스를 추가했습니다. 창에서 버튼을 만들려고 시도했습니다. 클릭하면 원래 창을 계속 표시하면서 다른 창을 엽니 다. 여기 내 코드가 있지만 항상 오류를 보여줍니다. 'my2'는이 범위에서 선언되지 않았습니다. 나는 widget.h에서 'my2'를 선언했으며 widget.h 파일을 mydlg.cpp에 포함 시켰습니다. 어디서 잘못되었는지 모르지만 누군가 나를 도울 수 있습니까? 정말 고맙습니다!C++이 "이 범위에서 선언되지 않았습니다."컴파일 오류

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(); 

} 

MAIN.CPP

#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 

widget.h

#include <QtGui/QApplication> 

#include "widget.h" 

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

    return a.exec(); 
} 
+3

제목은 C, 태그 및 코드는 C++이며, 이제 무엇을 말합니다. –

+3

오, *** 들여 쓰기. *** –

+0

C 실수로 유감스럽게 생각합니다. – nieschumi

답변

0

my2Widget 클래스에 선언,하지만 당신은에 액세스하려고 myDlg 클래스의 멤버 함수입니다.

+0

에 올바른 액세스 권한을 얻으려면 어떻게해야합니까? QT 디자이너에 대한 자습서를 따르고 있는데, 어떻게 처리해야할지 전혀 알지 못합니다. ( – nieschumi

+1

QT에 익숙하지 않습니다. 그러나 발생한 문제는 C++ 범위 지정 규칙과 관련이없는 것 같습니다. QT와 관련이 있습니다. 지역 변수, 전역 변수, 클래스 변수의 차이점에 대해 알아보고 거기에서부터 나가는 것이 좋습니다. –

+0

좋은 제안, 나는 확실히 그들에 대해 배울 것입니다. 감사합니다! – nieschumi

0

보십시오 당신이 (my2 포함) 클래스에서 인스턴스화 할 수있는 모든 객체의 동작을 작성하는 myDlg 클래스에서 작성하는 경우 show()my2.show() 교체.

그것은 다음 MyDlg 클래스 내에서 my2을 참조 할 수 이해가되지 않습니다, 다른 사람이 대신 대신에 (예를 들어)라는 또 다른 객체 my3를 인스턴스화 할 수있는 클래스를 사용하기 때문이다. 당신이하고자하는 것은 클래스의 객체에서 _pushButton_clicked()이 호출되어 동일한 객체에 대해 show() 함수를 호출 할 때 컴파일러에게 알려주는 것입니다. this->show() 또는 간단히 show()을 작성하여이 작업을 수행 할 수 있습니다.

관련 문제