【发布时间】:2018-04-29 18:12:27
【问题描述】:
我正在尝试访问在另一个类中声明为属性的类的成员。
项目类有一个workArea,也是project.h中定义的一个类。
我在 main 中实例化一个项目,然后通过它的构造函数将它发送到 mainWindow。一旦进入 mainWindow 构造函数,我尝试访问 project->lat 工作正常,但 project->workArea->latInf 崩溃。
我们将不胜感激。
project.h
#ifndef PROJECT_H
#define PROJECT_H
#include <QObject>
class WorkArea{
public://attributes
int latInf = 30;
public://methods
WorkArea()//Default constructor
{
}
~WorkArea();
};
class Project : public QObject
{
Q_OBJECT
public: //attributes
int lat = 20;
WorkArea* workArea;
public: //methods
explicit Project(QObject *parent = nullptr);
signals:
public slots:
};
#endif // PROJECT_H
main.cpp
#include "ui/mainwindow.h"
#include <QApplication>
#include "project.h"
int main(int argc, char *argv[])
{
Project* pj;
QApplication app(argc, argv);
MainWindow w( 0 , pj);
w.show();
return app.exec();
}
mainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent, Project *project) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
try
{
qDebug() << "Project latInf" << project->lat << "\n"; // works fine
qDebug()<< "Project lowLeft: " << project->workArea->latInf << "\n" ; // crashes
}
catch(std::exception &ex)
{
qDebug() << ex.what() ;
}
catch (...)
{
}
}
【问题讨论】:
-
project.cpp????
-
你在哪里创建workArea?,例如
workArea = new WorkArea; -
#include "project.h" Project::Project(QObject *parent) : QObject(parent) { }
-
将
Project::Project(QObject *parent) : QObject(parent) { }更改为Project::Project(QObject *parent) : QObject(parent) { workArea = new WorkArea; } -
workArea是一个指针,它不创建WorkArea对象,它只能存储一个WorkArea对象的内存地址