2010-03-29 2 views
0

Qt에 문제가 있습니다.Qt에서 일치하는 기능

나는 클래스가 '핵심'

class Core { 

    public: 

     static QString get_file_content(QString filename); 
     static void setMainwindow(Ui::MainWindow const *w); 

    private: 
     static MainWindow *main_window; 
}; 

및 클래스의 MainWindow를 '네임 스페이스 UI에서 : 나는

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    Core::setMainwindow(this); 
} 

을 확인하고 오류

를 얻을 수 MainWindow를 생성자에서

namespace Ui { 
    class MainWindow; 
} 

class MainWindow : public QMainWindow { 
    Q_OBJECT 
public: 
    MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

private: 
    Ui::MainWindow *ui; 
}; 

mainwindow.cpp:8: error: no matching function for call to 'Core::setMainwindow(MainWindow* const)' 

소스 중 'core'클래스의 선언이 포함 된 core.h가 포함되어 있습니다.

이는 setMainwindow 메소드에서만 발생합니다.

그래서 핵심 클래스 메소드 setMainwindow()가 MainWindow 클래스에서 보이지 않는 이유는 무엇입니까?

답변

1

MainWindow의 cpp/h 파일에 "Core.h"를 추가 했습니까?

setMainWindow에서 매개 변수없이 시도 했습니까? 관련이 없는지 확인하기 위해 시도 했습니까?

편집 : 네, Ui :: MainWindow가 아니라 매개 변수로 MainWindow가 필요하다고 생각하십니까?

+0

으로 변경하십시오. 물론 추가 할 수 있습니다. 도와주지 않았어. –

+0

MainWindow 클래스의 이름을 변경하고 변경하십시오 ... setMainWindow에서 매개 변수를 제거/변경하려고합니다 ... 그 주위에 뭔가있는 것이 확실합니다 ... –

4

Core::setMainwindow 메서드에 Ui::MainWindow*이 걸리고 MainWindow*이 전달되는 것이 문제입니다. 게시 한 코드에서 두 개의 MainWindow 클래스가 있으며 하나는 네임 스페이스 Ui에 있고 다른 하나는 최상위 네임 스페이스에 있습니다. 이것은 당신이 의미하는 것이거나 Ui에있는 것일뿐입니다?

+0

Ui 네임 스페이스에 선언 된 클래스 MainWindow가 있습니다. 하지만 setMainwindow에 대한 인수로 * ui를 전달하더라도 동일한 오류가 발생합니다. –

+1

@Alexander : 게시 한 코드가 아닙니다. 이 코드에는 두 개의 별개의'MainWindow' 클래스가 있습니다. 하나는'Ui' 네임 스페이스의'MainWindow' 클래스의 선언이고, 다른 하나는 최상위 네임 스페이스의'MainWindow' 클래스의 완전한 정의입니다. – Troubadour

+0

@Alexander : BTW, 오직 하나의'MainWindow' 클래스를 원한다면, 다른 메인 윈도우를 인스턴스화하는 생성자 뒤에있는 추론은 무엇입니까? 당신은 그것을 실행하려고하면 결국 메모리를 소모하게 될 무한 루프를 줄 수 있다는 것을 알고 있습니까? – Troubadour

1

MainWindow 클래스는 Ui 네임 스페이스 안에 중첩되지 않습니다. Ui::MainWindow 클래스를 전방 선언했지만 (글로벌 네임 스페이스에서) ::MainWindow 클래스를 구현했습니다. 이 때문에 귀하의 Core::setMainwindowUi::MainWindow이지만, 귀하는 ::MainWindow입니다.

내가 중첩이 부족 올바른 것으로 추측하고있어 - 그리고 Ui::MainWindow은 Qt는 디자이너에 의해 생성하고, MainWindow는 사용자 정의 코드를 모두 포함하는 구현 클래스입니다. 그렇다면 코드를

class Core { 

    public: 

     static QString get_file_content(QString filename); 
     static void setMainwindow(MainWindow const *w); 

    private: 
     static MainWindow *main_window; 
}; 
+0

그는 무한 루프가 남았음을 의미합니다. 그러나 적어도 컴파일 될 것입니다! – Troubadour

+0

@Troubadour 여기에 무한 루프가 표시되지 않습니다. 'Ui :: MainWindow'는 모든 위젯을 가지고 있지만 상호 작용 방법에 대한 코드는 없습니다. ':: MainWindow'는 그들이 어떻게 상호 작용하는지에 대한 모든 코드를 가지고 있습니다. Qt Designer를 사용하여 인터페이스를 그릴 때 표준 Qt 디자인 패턴입니다. –

+0

나는 당신의 초기 대답과 코드에 대해 논평했다. – Troubadour