Qt:使用另一个参数

时间:2015-07-19 08:18:58

标签: c++ qt qlist

我在用另一个参数实例化一个新类时遇到了问题。

我的问题是在QList Asteroids对象中添加一些东西。在Qt中,我有以下错误消息:

  

无法在分配中将“SettingsAsteroid”转换为“SettingsAsteroid *”        this-> settingsAsteroid = SettingsAsteroid();

以下是该课程的相关文件,我认为其他课程不相关。

GameView.h中的数据:

#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

GameView.c中的源代码:

#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)

1 个答案:

答案 0 :(得分:1)

根据您的错误

  

无法在作业SettingsAsteroid中将“SettingsAsteroid*”转换为“this->settingsAsteroid = SettingsAsteroid();

关于代码:

this->settingsAsteroid = SettingsAsteroid();

您正在尝试将SettingsAsteroid转换为SettingsAsteroid*,即:指向SettingsAsteroid对象的指针。

由于GameView的成员settingsAsteroidSettingsAsteroid*,因此您需要为其指定SettingsAsteroid,而不是SettingsObject本身。您可以执行以下操作之一:

this->settingsAsteroid = new SettingsAsteroid();

调用new将为所需对象(您的SettingsAsteroid)分配内存,并返回指向SettingsAsteroid*类型内存的指针。或者,如果您已有一些SettingsAsteroid对象,则可以指定

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