불완전한 type&quot &quot, 현장 있다. 오류

내 헤더 파일을 오류가 있습니다.

field "ui" has incomplete type.

나도 날잡아 만드는 것이 아니라, ',' ᅴ 포인터 doesn& # 39, 빗나갔다. # 39, i (i have already 문제 때문에 이를 데릭쉐퍼드와 don& 것 같지는 않다 '' 내 '에 정의된 맹빈다우클레스 이름공간이 ᅴ'. 이건 내 '맹빈다우스트':

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include "ui_mainwindow.h"

namespace Ui {
    class MainWindowClass;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

    public:
        MainWindow(QWidget *parent = 0, Qt::WFlags flags=0);
        ~MainWindow();

    public slots:
        void slideValue(int);
    private:
        Ui::MainWindowClass ui; //error line
};

#endif // MAINWINDOW_H
질문에 대한 의견 (1)

앞으로 '유형' 맹빈다우클레스 대한 선언을 사용하고 있습니다. # 39 의 that& 좋아요, 하지만 또한 포인터 또는 참조입니다 선언할 수 있는 의미 있는 유형:. 그렇지 않으면 컴파일러와의 주님으로부터그에게 아이디어, t know it doesn& 로케이터로 상위입니다 할당하고자 어떻게 # 39 의 크기는 전달하십시오 선언된 유형 (또는) 는 실제로 파라메트리스 구성자를 경우, etc.)

그러니까 인컨텍스트 로렌아줌마가:

// forward declaration, details unknown
class A;

class B {
  A *a;  // pointer to A, ok
};

39 can& 사용할 경우, 또는 t 포인터입니다 또는 참조입니다.

// declaration of A
#include "A.h"

class B {
  A a;  // ok, declaration of A is known
};

어느 시점에서 컴파일러는 지시에요 대한 자세한 내용은 'A'.

39 만 보관할 경우, 그 후 포인터입니다 'A' t need it doesn& detaiils 선언할 때 'B'. 어느 시점에서 이 필요해 (실제로 역참조 때마다 포인터를 'A') 에 있는 파일을 할 수 있는 가능성이 구축현 머리글로 포함시키십시오 포함하는 클래스의 선언은 'A'.

// B.h
// header file

// forward declaration, details unknown
class A;

class B {
public: 
    void foo();
private:
  A *a;  // pointer to A, ok
};

// B.cpp
// implementation file

#include "B.h"
#include "A.h"  // declaration of A

B::foo() {
    // here we need to know the declaration of A
    a->whatever();
}
해설 (1)

문제는 '속성' 사용자 ui 는 앞으로 선언 '클래스', 즉 불완전한 type&quot ᅴ 맹빈다우클레스 "; 오류:.

이 클래스는 헤더 파일에 선언된 있는 등 문제가 해결됩니다.

  • 편집할지 *

의견에 따라 다음 코드:

namespace Ui
{
    class MainWindowClass;
}
    • 클래스 너희가운데 있지 않습니다. 즉, 클래스 a , # 39 의 it& 전달하십시오 선언, br /&gt 어느 시점에서 dell. https://partner. time.&lt 존재하게 됩니다. 기본적으로, 그냥 그 유형은 shouldn& # 39 에서 컴파일러와의 존재하며, 이는 t 경고자로서 거야.

그러나 클래스용 어딘가에 정의할 수 있다.

참고 이 수만 있다면 이런 type.&lt, br /&gt 포인터입니다 , 작동합니까

39, t 투명지에 정적으로 할당할지 인스턴스에서는 can& 있습니다 불완전한 유형:.

그래서 실제로 당신은 불완전한 유형, 그리고 인컨텍스트 스맥랜드의 포인터로 멤버 'ᅴ' 선언해야 합니다.

namespace Ui
{
    // Forward declaration - Class will have to exist at link time
    class MainWindowClass;
}

class MainWindow : public QMainWindow
{
    private:

        // Member needs to be a pointer, as it's an incomplete type
        Ui::MainWindowClass * ui;
};

한 후, '또는' ᅴ 맹빈다우클레스 할당할지 인스턴스에서는 운영까지도 정적으로 선언할 수 있어야 합니다. 할 수 있어 또 다른 헤더 파일 (일반적으로 there& # 39 의 헤더 파일 하나 당 클래스), br /&gt .&lt. 하지만 단순히 코드 변경.

namespace Ui
{
    // Real class declaration - May/Should be in a specific header file
    class MainWindowClass
    {};
}

class MainWindow : public QMainWindow
{
    private:

        // Member can be statically allocated, as the type is complete
        Ui::MainWindowClass ui;
};

또 작동합니까.

둘 사이의 차이점은 선언. 실제로 사용하는 동안 첫 번째 선언, 앞으로 클래스를 선언합니다. (여기서 속성를 없이 아니하고또 메서드을).

해설 (7)