【问题标题】:Qt: Create a new class with another parameterQt:使用另一个参数创建一个新类
【发布时间】:2015-07-19 08:18:57
【问题描述】:

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

我的问题是在 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)

【问题讨论】:

  • 检查这个this-&gt;grfxScene = new QGraphicsScene(); 并注意区别。
  • 我改变了这个:this->settingsAsteroid = new SettingsAsteroid();还有这个:this->asteroids.append(new Asteroid(settingsAsteroid));但它不起作用

标签: c++ qt qlist


【解决方案1】:

根据您的错误

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

关于代码:

this->settingsAsteroid = SettingsAsteroid();

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

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

this->settingsAsteroid = new SettingsAsteroid();

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

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

【讨论】:

  • 我尝试过:在构造函数中:SettingsAsteroid sa; this->settingsAsteroid = &sa;在 start() int i; for(i=0;iasteroids.append(Asteroid(*settingsAsteroid));但现在我有不同的错误: erreur : 'QObject::QObject(const QObject&)' is private Q_DISABLE_COPY(QObject) ^
  • 您正在尝试复制QObject(或某些派生类),但其复制构造函数是私有的。这个问题不是问那个的地方,如果你有更多的问题,你应该问一个不同的问题。您的SettingsAsteroid 问题已解决。在提出新问题之前,请尝试将您的新问题简化为 Minimal, Complete, Verifiable Example。这样做有助于他人提供帮助,并且通常可以帮助您自己发现问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2019-08-12
  • 2013-09-06
  • 1970-01-01
  • 2012-12-16
  • 2016-12-15
相关资源
最近更新 更多