我的应用程序中有一个设计问题。我对虚拟方法,继承等概念还很陌生,并且无法使其正常运行。
这种情况:
我有一个名为UI_Brainwash(纯巧合)的类,其中嵌套了一个第二类SoundReciver。
class UI_BRAINWASH : public wxDialog
{
public:
UI_BRAINWASH(wxWindow* parent,const wxString& title,double sec);
virtual ~UI_BRAINWASH();
void OnTimer(wxTimerEvent& event);
void StartLoop();
class Soundreciver : public irrklang::ISoundStopEventReceiver
{
Soundreciver();
// why is this not allowed?!
Soundreciver(UI_BRAINWASH* par){this->parent = par;}
virtual void OnSoundStopped(ISound* sound, E_STOP_EVENT_CAUSE reason, void* userData);
public: // or private: doesn't change it -> compiler still complains
UI_BRAINWASH* parent;
};
private:
wxTimer* m_timer;
在我的Brainwash类中,我播放声音,并在播放声音后调用OnSoundStopped(),这是抽象irrklang :: ISoundStopEventReceiver类的虚拟方法。
http://www.ambiera.com/irrklang/docu/classirrklang_1_1_i_sound_stop_event_receiver.html
在这种方法中,我想启动一个wxTimer,它是UI_Brainwash类的成员,问题是我无法在没有该类的句柄的情况下访问该类的变量(或者我可以吗?),所以我想到了编写一个构造函数:
Soundreciver(UI_BRAINWASH * par){this-> parent = par;}
但是当我使用VC2008进行编译时,出现以下错误:
UI_BRAINWASH :: Soundreciver :: Soundreciver':无法访问在类'UI_BRAINWASH :: Soundreciver'中声明的私有成员
:请参阅“ UI_BRAINWASH :: Soundreciver :: Soundreciver”的声明
:请参阅“ UI_BRAINWASH :: Soundreciver”的声明
我该如何解决这个难题?
谢谢您的时间/建议
最佳答案
您得到的消息不是有关访问私有变量parent
的消息,而是有关访问Soundreceiver
的构造函数的消息。您需要将您的Soundreceiver
构造函数公开。
class Soundreciver : public irrklang::ISoundStopEventReceiver
{
public:
Soundreciver();
// why is this not allowed?!
Soundreciver(UI_BRAINWASH* par){this->parent = par;}
virtual void OnSoundStopped(ISound* sound, E_STOP_EVENT_CAUSE reason, void* userData);
private: // or private: doesn't change it -> compiler still complains
UI_BRAINWASH* parent;
};
如Vlad所指出的,另一种方法是声明
UI_BRAINWASH
类的friend
Soundreciver
。关于c++ - 嵌套类设计C++虚拟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20082081/