2013-06-08 5 views
0

cette erreur apparaît dans la ligne 4:static_cast invalide de type 'QCell *' taper 'QWidget *'

void QPiece::setPosition(QPoint value) 
{ 
    _position = value; 
    QWidget* parentWidget = static_cast<QWidget *>(_board->Cells[value.x() ][ value.y() ]); 
if (parentWidget->layout()) { 
    parentWidget->layout()->addWidget(this); } 
else { 
    QHBoxLayout *layout = new QHBoxLayout(parentWidget); 
    layout->setMargin(0); 
    layout->addWidget(this); 
    parentWidget->setLayout(layout); 
} 
    this->setParent(_board->Cells[ value.x() ][ value.y() ]); 
} 

Voici la définition des cellules de fonction():

class QBoard : public QWidget 
{ 
    Q_OBJECT 
    public: 
      QCell *Cells[8][8]; 
      QBoard(QWidget *parent = 0); 
      void drawCells(); 

    private: 
      void positionCells(); 
}; 

Je pense que je fais quelque chose de mal, mais quoi? Merci d'avance. Voici le type de QCell, et je pense que QWidget est parent QLabel

class QCell:public QLabel 

{ 
    Q_OBJECT 

public: 
    QCell(QPoint position, QWidget *parent = 0); 

private: 
    QGame *_game; 
    QPoint _position; 
protected: 
     void mousePressEvent(QMouseEvent *ev); 
}; 
+0

si ne pas lancer cette affiche cette erreur: – Robert

+0

ne peut pas convertir 'QCell *' pour 'QWidget *' dans l'initialisation – Robert

+0

hey accouple comment avez-vous résoudre ce ? – Drakoumel

Répondre

5

Cela devrait fonctionner sans un casting du tout, la conversion de dérivés à base est implicite.

Une cause probable de cette erreur est que vous n'avez qu'une déclaration directe de QCell visible dans cette unité de compilation, ce qui déclencherait cette erreur. Vous devez avoir la déclaration de classe complète visible pour le compilateur pour savoir si cette conversion est légale ou non.

Exemple:

#include <QWidget> 

class QCell; 

int main(int argc, char **argv) 
{ 
    QCell *w = 0; 
    QWidget *q = static_cast<QWidget*>(w); 
} 
main.cpp: In function ‘int main(int, char**)’: 
main.cpp:8:41: error: invalid static_cast from type ‘QCell*’ to type ‘QWidget*’ 
Questions connexes