"Lapangan telah lengkap type" kesalahan
Ada kesalahan di file header:
field "ui" has incomplete type.
Saya telah mencoba membuat ui
pointer, tapi itu doesn't bekerja. Saya don't pikir saya harus melakukan itu karena aku sudah ditentukan saya MainWindowClass
dalam namespace Ui
. Ini adalah saya mainwindow.h
:
#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
70
2
Anda menggunakan deklarasi maju untuk jenis
MainWindowClass
. Yang's baik-baik saja, tapi itu juga berarti bahwa anda hanya dapat mendeklarasikan sebuah pointer atau referensi untuk jenis itu. Jika compiler tidak memiliki ide bagaimana untuk mengalokasikan objek induk seperti itu doesn't tahu ukuran maju menyatakan jenis (atau jika itu benar-benar memiliki parameterless konstruktor, dll.)Jadi, anda ingin:
Atau, jika anda bisa't menggunakan pointer atau referensi....
Di beberapa titik, compiler perlu tahu rincian dari
A
.Jika anda hanya menyimpan pointer ke
A
maka itu doesn't perlu detail-detail ketika anda mendeklarasikanB
. Kebutuhan mereka di beberapa titik (setiap kali anda benar-benar pointer dereference untukA
), yang kemungkinan akan di implementasi file, di mana anda akan perlu untuk memasukkan header yang berisi deklarasi kelasA
.Masalahnya adalah bahwa anda
ui
properti menggunakan maju deklarasi kelasUi::MainWindowClass
, maka "tidak lengkap type" kesalahan.Termasuk file header di mana kelas ini menyatakan akan memperbaiki masalah.
EDIT
Berdasarkan komentar anda, kode berikut:
tidak TIDAK menyatakan sebuah kelas. It's a maju deklarasi, yang berarti bahwa kelas akan ada di beberapa titik, di link waktu.
Pada dasarnya, itu hanya memberitahu compiler bahwa jenis akan ada, dan bahwa hal itu tidak't memperingatkan tentang hal itu.
Tapi kelas harus didefinisikan suatu tempat.
Catatan ini hanya bisa bekerja jika anda memiliki pointer seperti jenis.
Anda dapat't memiliki statis dialokasikan contoh lengkap jenis.
Jadi baik anda benar-benar ingin tipe yang tidak lengkap, dan kemudian anda harus menyatakan
ui
anggota sebagai pointer:Atau anda ingin statis dialokasikan contoh dari
Ui::MainWindowClass
, dan kemudian itu harus dinyatakan. Anda bisa melakukannya di lain file header (biasanya, ada's satu file header per kelas).Tapi hanya mengubah kode ke:
juga akan bekerja.
Perhatikan perbedaan antara dua deklarasi. Pertama menggunakan deklarasi maju, sementara yang kedua benar-benar menyatakan kelas (di sini dengan tidak ada sifat atau metode).