2011-06-01 4 views
1

Je reçois l'erreur suivante en essayant de construire mon application dans Qt Creator:Qt - type de fonction de surcharge non résolue

erreur (ligne 3): pas de fonction concordante pour appel à « QGraphicsScene :: QGraphicsScene() »

La source en est simplement (nom de fichier est gamscene.cpp):

#include "gamescene.h" 

GameScene::GameScene() : QGraphicsScene(parent) 
{ 

} 

Je googled autour et ai vu des problèmes similaires, mais je ne comprends pas vraiment les réponses données.

+0

Quelle est la définition de 'GameScene' et qu'est-ce que' parent'? – Nawaz

Répondre

2

Nous avons dérivé de la classe QGraphicsScene comme si

class ImprintTemplateScene : public QGraphicsScene 
{ 
    Q_OBJECT 
public:    
    ImprintTemplateScene(QObject *parent = 0); 

... 
}; 

Notez que le parent est un paramètre passé au constructeur. L'implémentation du constructeur ressemble à:

ImprintTemplateScene::ImprintTemplateScene(QObject *parent) 
    : QGraphicsScene(parent), 
     sceneMode(mode_normal), 
     editingTextBox(0) 
{ 
} 
0

parent sur votre ligne 3 doit provenir de quelque part. Puisque vous définissez un constructeur GameScene, vraisemblablement c'est vraiment un argument au constructeur (je ne connais pas Qt donc je ne sais pas quel type parent devrait être - employez le type approprié dans votre code actuel):

GameScene::GameScene(TypeOfParent parent) : QGraphicsScene(parent) 
{ 
} 

Ou si elle peut donner un sens pour le constructeur QGraphicsScene d'être appelé sans parent, puis:

GameScene::GameScene() : QGraphicsScene() 
{ 
} 

pourrait être une possibilité. Probablement pas, puisque le message d'erreur indique qu'il n'y a pas de constructeurs zéro-argument de QGraphicsScene.

En outre, vous n'avez pas publié la définition de classe, mais étant donné votre tentative de définition de constructeur, je suppose que GameScene hérite publiquement de QtGraphicsScene. Ainsi, lorsque vous construisez GameScene, vous devez appeler le constructeur de la superclasse (comme vous essayez de le faire). Mais les arguments du constructeur de la superclasse ne peuvent provenir que d'arguments à votre constructeur. Donc, si le constructeur de la superclasse a besoin d'un argument, votre constructeur aura besoin de cet argument pour le passer au constructeur de la superclasse (à moins qu'il ne soit logique de passer un argument de constante de compilation au constructeur de la superclasse).

Questions connexes