I want to make a logout button from the application how best to do it.

main.cpp

#include "authdialog.h" AuthDialog w; w.show(); //ΠΎΠΊΠ½ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ 

authdialog.cpp

 #include "mainwindow.h" MainWindow *win; Π±Π»Π° Π±Π»Π° Π±Π»Π° if (ui->loginLineEdit->text() == user) { isAuth(user); win = new MainWindow(); win->setUserOnline(user); win->show(); //ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ this->close(); } 

mainwindow.cpp

 #include "authdialog.h" AuthDialog *newauth; //ΠΊΠ½ΠΎΠΏΠΊΠ° Π»ΠΎΠ³Π°ΡƒΡ‚Π° ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π΄ΠΎΠ»ΠΆΠ½ΠΎ закрытся гласноС ΠΎΠΊΠ½ΠΎ(mainwindow) //ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒΡΡ authdialog void MainWindow::on_logoutPushButton_clicked() { this->close(); newauth = new AuthDialog; newauth->show(); } 

getting an error

 mainwindow.h ошибка: 'AuthDialog' does not name a type AuthDialog *newauth; ^~~~~~~~~~ 

mainwindow.h

 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> //#include <QSqlTableModel> #include <QCalendarWidget> #include <QSqlRelationalDelegate> #include <QSqlTableModel> #include <QDebug> #include <QSqlRecord> #include <QDesktopWidget> #include <QRect> #include <QPoint> #include <QTimer> #include <QSortFilterProxyModel> #include <QMenu> #include <QAction> #include <QBoxLayout> #include <QWidget> #include <QTextCharFormat> #include "crmmodel.h" #include "neworder.h" #include "delorderdialog.h" #include "workers.h" #include "discounts.h" #include "checkboxdelegate.h" //#include "comboboxstatusdelegate.h" #include "phonenumberdelegate.h" #include "salarydelegate.h" #include "about.h" #include "history.h" #include "buttondelegate.h" #include "loggingcategories.h" #include "movetocenter.h" #include "crmusers.h" //#include "crmuserdelegate.h" #include "uploadfileform.h" //#include "authdialog.h" #include "contactsform.h" namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); CRMModel *model; void setUserOnline(QString user); //ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ· ΠΎΠΊΠ½Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ‚ΠΎ залогинСлся private slots: void on_addOrderButton_clicked(); void on_delButton_clicked(); void orderAccepted(); void orderCancled(); // void slotDelOrder(); void on_calendarWidget_clicked(const QDate &date = QDate::currentDate()); //сколько Π·Π°ΠΊΠ°Π·ΠΎΠ² Π½Π° Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ дСнь, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚ΠΊΡƒΡ‰ΠΈΠΉ дСнь void on_actionAdd_worker_triggered(); void on_editOrderPushButton_clicked(); void on_pushButton_clicked(); void on_actionAdd_order_triggered(); void on_actionExit_triggered(); void slot_comboWorkersBox_currentIndexChanged(const QString &arg1); //void on_todayPushButton_clicked(); void on_todayPushButton_clicked(); void on_actionAddDiscount_triggered(); void on_actionInfo_triggered(); // void moveToCenter(QWidget& widget); //ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ // void moveToCenter(QWidget* widget);//ΠΎΡ‚Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ²ΠΊΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠΊΠΎΠ½ void setUserLogout(); void whoOnline(); void showOrdersForToday(); void on_logoutPushButton_clicked(); void on_actionLogout_triggered(); void on_lastOrdersPushButton_clicked(); void on_lastCancelOrdersPushButton_clicked(); void slotRightClickMenuRequested(QPoint pos); //мСню ΠΏΠΎ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ крысы void on_actionHistoryLog_triggered(); void on_actionCRMusers_triggered(); void uploadFile(); void startUpload(int ID,QString NAME); void on_b1_clicked(); void on_b2_clicked(); void on_b3_clicked(); void on_b4_clicked(); void on_b5_clicked(); void on_b6_clicked(); void on_b7_clicked(); void on_b8_clicked(); void on_b9_clicked(); void on_b0_clicked(); void on_bzvezda_clicked(); void on_breshotka_clicked(); void on_delPhoneCharPushButton_clicked(); void on_actionContacts_triggered(); private: Ui::MainWindow *ui; newOrder *new_o; delOrderDialog *del_o; workers *workers_window; discounts *discounts_window; about *about_window; history *history_window; CRMusers *crmusers_window; QString clickedDay; int typeIndex; // QSqlQuery *todayOrdersQuery; QSqlQuery *currentDayTotalOrdersQuery; QString userOnline; //сюда пСрСписываСм ΠΊΡ‚ΠΎ сСйчас ΠΎΠ½Π»Π°ΠΉΠ½ ΠΈΠ· ΠΎΠΊΠ½Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ uploadFileForm *uploadFile_window; // AuthDialog *newauth; ContactsForm *contacts_window; protected: void closeEvent(QCloseEvent *event); }; #endif // MAINWINDOW_H 

authdialog.h

 #ifndef AUTHDIALOG_H #define AUTHDIALOG_H #include <QDialog> #include <QSqlDatabase> #include <QMessageBox> #include <QSqlQuery> #include <QDateTime> #include "mainwindow.h" namespace Ui { class AuthDialog; } class AuthDialog : public QDialog { Q_OBJECT public: explicit AuthDialog(QWidget *parent = 0); ~AuthDialog(); private slots: void on_enterButton_clicked(); void isAuth(QString user); private: Ui::AuthDialog *ui; QSqlDatabase *db; QMessageBox *dbMess; QSqlQuery *query; QMessageBox *nullMess; QMessageBox *connMess; QMessageBox *enterMess; MainWindow *win; }; #endif // AUTHDIALOG_H 
  • The error is in mainwindow.h , you can also attach it - Pavel
  • The authdialog connects to the mainwindow in which the authdialog is connected. So he tupit. How to get around this? - Alexey Smirnov
  • Put all the files here, including mainwindow.h and authdialog.h - Pavel
  • they are huge there already very github.com/89626906891/crm - Alexey Smirnov

1 answer 1

In mainwindow.h after all #include add

 class AuthDialog; 

Below in the file you use the pointer to AuthDialog (it is now commented out, but the error was clearly from him) so it is necessary that the class declaration is visible. But to include authdialog.h in mainwindow.h will not work because of the occurrence of a cyclic dependency between them. The solution is a forward declaration.