所以我只花了大约4个小时的夜间练习来解决此错误,但我不能。它在C++中的wxw应用程序。

我有一个应用程序类,在其中声明我的主窗口。然后,我在第一个窗口类中声明第二个窗口。我想在第二个窗口类中引用第一个窗口的类。我只是不断收到此错误。



我的App类头文件:

#ifndef STUDENTONATORAPP_H
#define STUDENTONATORAPP_H

#include <wx/app.h>
#include <wx/dialog.h>
#include <AddMarkOne.h>
#include <StudentonatorMain.h>

class StudentonatorApp : public wxApp
{
    public:
        virtual bool OnInit();
};

#endif // STUDENTONATORAPP_H

我的主要wxDialog头文件:
#ifndef STUDENTONATORMAIN_H
#define STUDENTONATORMAIN_H

#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif

#include "AddMarkOne.h"
#include "StudentonatorApp.h"
#include "student.h"


#include <wx/button.h>
#include <wx/statline.h>
#include <wx/grid.h>
#include <list>
#include <iostream>
#include <fstream>
using namespace std;

class StudentonatorDialog: public wxDialog
{
    public:
        StudentonatorDialog(wxDialog *dlg, const wxString& title);
        void refresh();
        ~StudentonatorDialog();
        int ID_counter = 0;
        list<student*> GetList(){return StudentList;};
    protected:
        enum
        {
            idBtnAbout,
            idBtnAddStudent,
            idBtnRemoveStudent,
            idBtnEditStudent,
            idBtnAddMark
        };
        wxStaticText* m_staticText1;
        ...
        list<student*> StudentList;
        AddMarkOne* dlgaddmark1;

    private:
        void OnClose(wxCloseEvent& event);
        ...
        int numstrlevelcounter=0;
};

#endif // STUDENTONATORMAIN_H

这是我的第二个wxDialog类:
#ifndef ADDMARKONE_H
#define ADDMARKONE_H

#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif

#include <wx/dialog.h>
#include <wx/button.h>
#include <wx/statline.h>
#include <wx/grid.h>
#include <list>
#include <iostream>
#include <fstream>

#include "StudentonatorMain.h"
#include "student.h"
#include "StudentonatorApp.h"


using namespace std;

class AddMarkOne: public wxDialog
{
    public:
        AddMarkOne(wxDialog* dlg1, const wxString& title, StudentonatorDialog* maindialog);
        ~AddMarkOne();
        int ID_counter = 0;
        void SetID(int ID){this->ID = ID;}


    protected:
        enum
        {
            idBtnNext,
        };
        wxStaticText* m_staticText1;
        wxStaticLine* m_staticline1;
        wxButton* BtnNext;


    private:
        void OnClose(wxCloseEvent& event);
        int i;
        int j;
        DECLARE_EVENT_TABLE()
        int ID;

};

#endif // ADDMARKONE_H

请帮忙 :)

最佳答案

据我对C++的了解,您不能在类声明(例如Java语言)中为类成员分配值,您应该在构造函数中执行此操作

int ID_counter = 0;


 int numstrlevelcounter=0;

UPDATE :
您已经声明了AddMarkOne类,它引用了StudentonatorDialog,并声明了StudentonatorDialog类,它引用了AddMarkOne。似乎这里有一个循环。并且使用此循环,您将无法解决此问题。我的建议是完善您的主要架构,继承和多态性

您的#include语句必须具有以下模式:
1.首先是更多的抽象类include语句,然后是继承的类include语句
2.在更抽象的类中,您不应引用继承的类。
3.您的继承链必须像树(没有任何循环)之类的东西作为您的include语句

08-26 16:30
查看更多