2015-06-18 2 views
-1

Я пытаюсь получить доступ к методу моего родительского класса, см код:Forwarded класса, не может получить доступ к методу

#include <wx/wx.h> 
#include <wx/taskbar.h> 
#include <iostream> 
#include "appicon.xpm" 

class MyFrame; // forward 

class mywxTaskBarIcon : public wxTaskBarIcon 
{ 
    private: 
     MyFrame *m_parent; 
    public: 
     mywxTaskBarIcon (MyFrame *parent, const wxIcon& icon) : 
      wxTaskBarIcon(), m_parent (parent) 
     { 
      SetIcon (icon, wxT("Listos")); 
     } 
     virtual ~mywxTaskBarIcon() { 
      std::cout << "died" << std::endl; 
     } 
    protected: 
     virtual wxMenu *CreatePopupMenu() { 
      return m_parent->getFileMenu(); // invalid type 
     } 
}; 

class MyFrame : public wxFrame 
{ 
    private: 
     wxIcon main_icon; 
     wxSharedPtr<mywxTaskBarIcon> tray; 
    public: 
     MyFrame (const wxString& title) : 
      wxFrame (NULL, wxID_ANY, title), main_icon(appicon) 
     { 
      SetIcon (main_icon); 
      wxMenuBar *menubar = new wxMenuBar; 
      menubar->Append (loadFile(), wxT("&Aplicación")); 
      SetMenuBar(menubar); 
      tray = wxSharedPtr<mywxTaskBarIcon>(new mywxTaskBarIcon (this, main_icon)); 
      Centre(); 
      Show(); 
     } 
     wxMenu * getFileMenu() { 
      return loadFile(); 
     } 
    protected: 
     wxMenu* loadFile() { 
      wxMenu *file = new wxMenu; 
      file->Append (wxID_EXIT, wxT("&Salir")); 
      return file; 
     } 
}; 

class MyApp : public wxApp 
{ 
    public: 
     virtual bool OnInit() { 
      new MyFrame (wxT("Hola")); 
      return true; 
     } 
}; 

wxIMPLEMENT_APP (MyApp); 
wxDECLARE_APP (MyApp); 

Как вы можете видеть, что это проект WxWidgets. После того, как я переадресовал класс, я хочу получить доступ к методу моего класса, но я получаю эту ошибку об использовании недопустимого типа.

+1

См. Также [Разрешение круговых зависимостей в C++] (http://stackoverflow.com/questions/625799/resolve-circular-dependencies-in-c) – juanchopanza

ответ

0

После того как я перенаправил класс, я хочу получить доступ к методу моего класса, но я получаю эту ошибку об использовании недопустимого типа.

Для создания или вызова любых методов класса необходимо определение. В прямом объявлении указывается только тип с заданным именем.

Возможно, вы сможете исправить это, поставив код, который нуждается в полных определениях (например, wxMenu *CreatePopupMenu()) в файлах реализации.

Смежные вопросы