我在用另一个参数实例化一个新类时遇到了问题。
我的问题是在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)
答案 0 :(得分:1)
根据您的错误
无法在作业
SettingsAsteroid
中将“SettingsAsteroid*
”转换为“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;