доступ к члену класса из другого класса в C ++ - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь получить доступ к члену класса, объявленному в другом классе, как атрибут.

В классе проекта есть workArea, который также является классом, определенным в project.h.

Я создаю экземпляр проекта в главном, а затем отправляю его в главное окно через его конструктор. Оказавшись в конструкторе mainWindow, я пытаюсь получить доступ к проекту-> lat, который работает нормально, но происходит сбой проекта-> 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 (...)
    {

    }
}

1 Ответ

0 голосов
/ 29 апреля 2018

Вот и все. Спасибо @eyllanesc. Я забыл создать работу. Хотя я просто использовал его в качестве атрибута в Project, это нормально, но мне пришлось заполнить это пространство памяти в конструкторе проекта.

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){
    workArea = new WorkArea;
  }
signals:
public slots:
};


#endif // PROJECT_H
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...