Qt: utilisation incorrecte de type incomplète et en avant de la déclaration de
J'ai une certaine incompréhension:
A. h
#ifndef A_H
#define A_H
#include "B.h"
class A : public B
{
Q_OBJECT
public:
A();
};
#endif
A.cpp
#include "A.h"
A::A()
{
B::ui->blancH2->setValue(2);
}
B. h
#include <QWidget>
#ifndef B_H
#define B_H
namespace Ui {
class B;
}
class B
{
Q_OBJECT
public:
explicit B(QWidget *parent = 0);
public:
Ui::B *ui;
};
#endif
Comme résultat de la compilation j'ai des erreurs:
A.cpp: Dans le constructeur 'A::A()': utilisation non valide de type incomplète "classe Ui::B'
B. h: avant la déclaration de la classe Ui::B'
Quelqu'un peut-il expliquer pourquoi j'ai cette erreur?
- Astuce: B et Ui::B ne sont pas de la même classe. Elles sont totalement différentes.
- Vous disposez de deux différentes classes de B ici, Ui::B et juste B. Êtes-vous sûr que c'est ce que vous voulez?
- comme Mike Seymour remarqué, vous devez inclure dans a.cpp fichier même en-tête, qui est inclus dans b.cpp qui contient la définition de
Ui::B
classe.
Vous devez vous connecter pour publier un commentaire.
Vous de vérifier ui_B.h. À la fin de celui-ci, vous devriez voir
Si elle ne l'est pas, vous pouvez vous ouvrir .fichier d'interface utilisateur dans Qt Designer, sélectionnez votre gadget, et dans l'Inspecteur d'Objet, changer de chaîne, en vertu de l '"Objet" à "B". La valeur par défaut est 'Dialogue' si votre widget est une boîte de dialogue.
Ne pas modifier ui_B.h directement depuis qu'il est généré par le compilateur de Qt et il sera écrasé à chaque fois que vous compilez.
Que l'erreur dit, il n'y a pas de définition de la
Ui::B
disponibles, seule la déclarationB.h
; et vous ne pouvez pas écrire du code qui accède à des membres d'une classe, à moins que la classe a été définie.Vous devez inclure selon l'en-tête définit
Ui::B
; ou, peut-être, donnerB
une fonction membre pour faire ce queA
a besoin de faire, plutôt que de furtling avecB
's les membres directement.Dans Qt Creator, ouvrez la boîte de dialogue formulaire. Sélectionnez la boîte de dialogue du panneau et sur la droite, assurez-vous que le Nom de l'Objet est B.
Qui permettent de Qt système de construction de savoir que votre objet est un objet d'INTERFACE utilisateur. Sans cela, votre programme ne connaît votre panneau comme un nom d'objet boîte de Dialogue.
En fait j'ai rencontré ce problème lorsque j'ai changé le nom de "MainWindow" à "LoginWindow" après l'ensemble de l'application est créé.Cela ne peut pas être utile pour tout le monde mais de changer le nom de l'original(que vous avez renseignés lors de la mise en route du projet) peut fonctionner pour moi.
Encore ne connaissent pas .l'interface utilisateur des fichiers de l'intervalle Qt en espérant que quelqu'un peut expliquer ce~