我在用另一个参数实例化新类时遇到问题。
我的问题是在QList Asteroids对象中添加一些内容。在Qt中,我收到此错误消息:
以下是该类的相关文件,我认为其他类无关。
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)
最佳答案
根据您的错误
在代码上:
this->settingsAsteroid = SettingsAsteroid();
您正在尝试将
SettingsAsteroid
转换为SettingsAsteroid*
,即:指向SettingsAsteroid
对象的指针。因为
GameView
具有成员settingsAsteroid
,它是SettingsAsteroid*
,所以您需要给它一个指向SettingsAsteroid
的指针,而不是SettingsObject
本身。您可以执行以下操作之一:this->settingsAsteroid = new SettingsAsteroid();
调用
new
将为所需对象(您的SettingsAsteroid
)分配内存,并返回一个指向该内存的指针,其类型为SettingsAsteroid*
。或者,如果您已经有一些SettingsAsteroid
对象,则可以将分配给来代替:SettingsAsteroid sa;
...
this->settingsAsteroid = &sa;
关于c++ - Qt:使用另一个参数创建一个新类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31499255/