# в том числе заголовок класса не указывает тип - PullRequest
0 голосов
/ 04 сентября 2011

Я столкнулся с очень странной проблемой в моем приложении wxWidgets. Я пытаюсь использовать собственный ресурс wxPanel для обеспечения некоторого контроля избыточности и предоставления методов, которые позволяют мне работать легче. Эта проблема не возникала до того, как я попытался передать доступ к ресурсу в главном фрейме каждой панели.

Я использую #include для включения заголовка класса ресурса wxPanel в заголовок основного класса. Однако при попытке объявить ресурс типа CopyRow, который находится в заголовочном файле, который я включаю, я получаю сообщение об ошибке CopyRow does not name a type

Вот код для заголовка основного класса,

#ifndef CPAMOUNTMAIN_H
#define CPAMOUNTMAIN_H

//(*Headers(CPAmountFrame)
#include <wx/sizer.h>
#include <wx/stattext.h>
#include <wx/menu.h>
#include <wx/spinctrl.h>
#include <wx/statline.h>
#include "CopyRow.h"
#include <wx/panel.h>
#include <wx/frame.h>
#include <wx/statusbr.h>
//*)

class CPAmountFrame: public wxFrame
{
    public:

        CPAmountFrame(wxWindow* parent,wxWindowID id = -1);
        void UpdateTotal();
        virtual ~CPAmountFrame();

    private:

        //(*Handlers(CPAmountFrame)
        void OnQuit(wxCommandEvent& event);
        void OnAbout(wxCommandEvent& event);
        void OntotalCopiesChange(wxSpinEvent& event);
        static void CallTotalCopies();
        //*)

        //(*Identifiers(CPAmountFrame)
        static const long ID_CUSTOM1;
        static const long ID_CUSTOM2;
        static const long ID_CUSTOM3;
        static const long ID_CUSTOM4;
        static const long ID_CUSTOM5;
        static const long ID_CUSTOM6;
        static const long ID_STATICLINE1;
        static const long ID_STATICTEXT1;
        static const long ID_SPINCTRL1;
        static const long ID_STATICTEXT2;
        static const long ID_PANEL1;
        static const long idMenuQuit;
        static const long idMenuAbout;
        static const long ID_STATUSBAR1;
        //*)

        //(*Declarations(CPAmountFrame)
        CopyRow* Custom4;
        wxStaticText* totalPrice;
        CopyRow* Custom1;
        CopyRow* Custom5;
        CopyRow* Custom2;
        CopyRow* Custom3;
        wxPanel* Panel1;
        wxStaticText* StaticText1;
        wxStatusBar* StatusBar1;
        wxStaticLine* StaticLine1;
        CopyRow* Custom6;
        wxSpinCtrl* totalCopies;
        //*)

        DECLARE_EVENT_TABLE()
};

#endif // CPAMOUNTMAIN_H

А вот код для CopyRow.h,

#ifndef COPYROW_H
#define COPYROW_H

#ifndef WX_PRECOMP
    //(*HeadersPCH(CopyRow)
    #include <wx/sizer.h>
    #include <wx/stattext.h>
    #include <wx/panel.h>
    //*)
#endif
//(*Headers(CopyRow)
#include <wx/spinctrl.h>
//*)
#include "CPAmountMain.h"

class CopyRow: public wxPanel
{
    public:

        CopyRow(wxWindow* parent,const char* label,wxSpinCtrl* copies,wxWindowID id=wxID_ANY,const wxPoint& pos=wxDefaultPosition,const wxSize& size=wxDefaultSize);
        void SetLabel(const char* label);
        void SetPrice(double price);
        void SetCounter(int value);
        int  GetCounter();
        virtual ~CopyRow();

    private:

        //(*Declarations(CopyRow)
        wxStaticText* copyLabel;
        wxSpinCtrl* numCopies;
        wxStaticText* copyPrice;
        //*)

        //(*Identifiers(CopyRow)
        static const long ID_SPINCTRL1;
        static const long ID_STATICTEXT1;
        static const long ID_STATICTEXT2;
        //*)

        wxSpinCtrl* totalCopies;

        //(*Handlers(CopyRow)
        void OnnumCopiesChange(wxSpinEvent& event);
        //*)
        DECLARE_EVENT_TABLE()
};

#endif

Может кто-нибудь объяснить мне эту ошибку? Я сейчас понятия не имею.

1 Ответ

3 голосов
/ 04 сентября 2011

Вы не можете включить CPAMountMain.h в CopyRow.h и CopyRow.h в CPAMountMain.h!Вы должны решить порядок, в котором вы хотите включить файлы.

Поскольку CPAMountMain.h использует только указатели для класса CopyRow, вы можете использовать прямое объявление вместо включения CopyRow.h:

// CPAMountMain.h
class CopyRow;

и удалить #include "CopyRow.h" в CPAMountMain.h это должно работать.

...