2015-07-19 76 views
3

我在使用另一个参数实例化一个新类时遇到了问题。Qt:用另一个参数创建一个新的类

我的问题是在QList Asteroids Object中添加一些东西。在Qt中,我有这个错误信息:

cannot convert 'SettingsAsteroid' to 'SettingsAsteroid*' in assignment this->settingsAsteroid = SettingsAsteroid();

下面是这样做的类的相关文件,我认为其他类是不相关的。

数据在GameView.h:在GameView.c

#ifndef GAMEVIEW_H 
#define GAMEVIEW_H 

#include <QGraphicsView> 
#include <QGraphicsItem> 

#include <QApplication> 
#include <QPushButton> 
#include <QList> 
#include <QObject> 
#include <QString> 

#include "Asteroid.h" 
#include "SettingsAsteroid.h" 


class GameView : public QGraphicsView 
{ 
    Q_OBJECT 

    // Data 
    int nbAsteroids; 
    int nbAsteroidsAlive; 
    SettingsAsteroid* settingsAsteroid; 
    QList<Asteroid> asteroids; 


    // Menu 
    QPushButton *startgame; 

    // Scène 
    QGraphicsScene* grfxScene; 

public: 
    GameView(); 
    ~GameView(); 

private slots: 

    void start(); 

}; 

#endif // GAMEVIEW_H 

的源代码:

#include "GameView.h" 
#include <iostream> 


GameView::GameView() 
{ 
    int nbAsteroids = 0; 
    int nbAsteroidsAlive = 0; 

    // data de jeu 
    this->settingsAsteroid = SettingsAsteroid(); 

    //Scene de debut 
    this->grfxScene = new QGraphicsScene(); 
    grfxScene->setSceneRect(0,0,800,600); 
    this->grfxScene->addPixmap(QPixmap(":/images/armageddon.jpg")); 

    setScene(this->grfxScene); 

} 

GameView::~GameView(){ } 

void GameView::start() 
{ 
    this->grfxScene->clear(); 

    int nbAsteroids = 4; 
    int nbAsteroidsAlive = 4; 

    int i; 
    for(i=0;i<nbAsteroids;i++) { 
     asteroids.append(new Asteroid(settingsAsteroid)); 
    } 
} 

构造Asteroid.c的:

Asteroid::Asteroid(SettingsAsteroid settingsAsteroid) 
+0

检查这一个'这 - > grfxScene =新QGraphicsScene();'和发现其中的差别。 –

+0

我改变了这个: this-> settingsAsteroid = new SettingsAsteroid(); 和这个: this-> asteroids.append(new Asteroid(settingsAsteroid)); 但它不起作用 – Linquisiteur

回答

1

根据你的错误

cannot convert ' SettingsAsteroid ' to ' SettingsAsteroid* ' in assignment this->settingsAsteroid = SettingsAsteroid();

在代码:

this->settingsAsteroid = SettingsAsteroid(); 

您正试图一个SettingsAsteroid转换为SettingsAsteroid*,那就是:一个指向SettingsAsteroid对象。

因为GameView有一个成员settingsAsteroid这是一个SettingsAsteroid*,你需要给它一个指向SettingsAsteroid,而不是一个SettingsObject本身。您可以执行下列操作之一:

this->settingsAsteroid = new SettingsAsteroid(); 

调用new将分配内存所需的对象(您SettingsAsteroid),并返回一个指向该内存,SettingsAsteroid*类型。或者,如果你已经有了一些SettingsAsteroid对象,您可以指定代替:

SettingsAsteroid sa; 
... 
this->settingsAsteroid = &sa; 
+0

我试试: 在构造函数中: SettingsAsteroid sa; this-> settingsAsteroid = &sa; In start() int i;对于(i = 0; i asteroids.append(Asteroid(* settingsAsteroid)); } 但现在我有不同的错误: ERREUR: '的QObject :: QObject的(常量的QObject&)' 是私有 Q_DISABLE_COPY(QObject的) ^ – Linquisiteur

+0

您要复制一个'QObject'(或派生类)但它的拷贝构造函数是私有的。这个问题不是问的地方,如果你有更多的问题,你应该问一个不同的问题。 'SettingsAsteroid'的问题已解决。在问一个新问题之前,尝试将你的新问题简化为[最小,完整,可验证的例子](http://stackoverflow.com/help/mcve)。这样做可以帮助其他人提供帮助,并且经常帮助您自己发现问题 – Tas

相关问题