Используйте функции из другого класса, который включает этот класс

0

Хорошо, я полностью потерялся здесь.

У меня есть два класса: mainwindow.cpp и settings.cpp. Оба используют функции от другого. Поэтому я попытался сделать каждый из них другим, но это привело к включению цикла. Поэтому мне пришлось использовать форвардные объявления. Однако это привело к ошибке: прямое объявление "Настройки класса".

Это мой код сейчас:

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

class Settings;

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        void someFunction();

    private:
        Ui::MainWindow *ui;
        Settings *settings;
};

#endif // MAINWINDOW_H

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
    ui->setupUi(this);

        QTreeWidgetItem* status;

        QString setting = settings->getSomeSetting();
    }

    MainWindow::~MainWindow() {
        delete ui;
    }

    void someFunction() {
        // DO STUFF
    }

settings.h:

#ifndef SETTINGS_H
#define SETTINGS_H

class MainWindow;

class Settings : public QSettings {
    public:
        Settings();
        QString getSomeSetting();
    private:
        MainWindow *mainwindow;
};

#endif // SETTINGS_H

settings.cpp:

#include "settings.h"

Settings::Settings() : QSettings(qApp->applicationDirPath() + "/settings.ini", QSettings::IniFormat) {
}

QString Settings::getSomeSetting() {
    mainwindow->someFunction();
    return "somesetting";
}

Так может ли кто-нибудь дать некоторые рекомендации о том, как это сделать? Заранее спасибо!

  • 0
    Я не вижу никаких включений?
  • 0
    Да, это я пытаюсь использовать предварительные декларации, но это не работает. Мне нужно знать, как это сделать правильно (два класса используют функции друг друга).
Показать ещё 1 комментарий
Теги:
qt

2 ответа

1
Лучший ответ

Вам нужно # включить "settings.h" в mainwindow.cpp и #include "mainwindow.h" в settings.cpp.

Читайте о различии в определении и определении.

1

Вам не хватает include и есть объявление вперед, которое не требуется. Если вы добавите include в mainwindow.h(#include "settings.h") и переадресовываете класс mainwindow в свой заголовок настроек, это должно работать нормально.

  • 0
    Я пробовал это, но затем я получаю эту ошибку: недопустимое использование неполного типа 'class MainWindow' QTreeWidgetItem * status = window-> setStatus ("Добавление игры \" "+ gameName +" \ "", "Status"); ^

Ещё вопросы

Сообщество Overcoder
Наверх
Меню