我正在尝试使用一些与其他功能相同的功能(继承)。这是我的主要课程:
class SREngineJulius_father {
protected:
bool g2pInit;
Recog *recog;
Jconf *jconf;
public:
bool InitG2P(std::string dic, std::string model, int pos_process_flag=-1);
bool Init_AM(std::string configStr);
};
两个函数InitG2P
和Init_AM
将在recog
和jconf
中进行更新。此更新是子类的所有子对象必须具有的。
class SREngineJulius: public SREngineJulius_father
{
DFA_INFO *dfaInfo;
WORD_INFO *wordInfo;
WORD_INFO *wordInfo_init;
Output lastResult;
TListString lastCmdList;
bool startNotifyCallbackLoop;
bool terminate;
bool pause;
DFA_INFO* copy_dfa_info(DFA_INFO* dfa);
DFA_INFO* create_commands_dfa_info();
static void status_recready(Recog *recog, void *dummy);
static void status_recstart(Recog *recog, void *dummy);
static void output_result(Recog *recog, void *dummy);
static void put_hypo_phoneme(WORD_ID *seq, int n, WORD_INFO *winfo);
std::string ReplaceSpace(std::string &str);
std::string RestoreSpace(std::string &str);
public:
bool InitG2P(std::string dic, std::string model, int pos_process_flag=-1);
char* NotifyCallbackLoop(char *ficheiro_wav);//AXY5
int SREngineJulius::Audio_Buffering(char* buffer_audio, int sizefile, int end_flag_, int flag_alocation);//AXY5
void Callbacks();
public:
~SREngineJulius();
bool InitSREngine(std::string recoConfig);
bool DynamicAddCommands(TListString &cmdlist, int startRecog = -1);
bool DynamicAddCommands(std::string cmdlist, std::string sep=" ", int startRecog = -1);
void Release();
};
所以问题是,当我调用子类的例程时,recog
和jconf
将被删除。
答案 0 :(得分:1)
你应该在你的班级中创建能够改变这两个变量的函数。尝试将它们插入匿名结构中。通过这种方式,他们可以轻松访问。
记住: 。 =参考 - > =指针
最后,您要在几个函数声明中更改recog。 尽量确保您所使用的功能中的功能友好。如果他们不是,你赢了'能够使用它们。
P.S。子类的子项,这些需要访问函数。他们必须通过向上继承来改变指针。所以你希望祖父母的子类有一个改变它的指针的类。你可以通过在孙子中拥有一个访问孩子的功能来做到这一点。那样你就会退回到这个功能中。这就是它的相关方式。