我试图做一个类的一些功能,将与其他(继承)共同出现。这是我的主要类:
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
被删除。
您应该在您的类中创建可以修改这两个变量的函数。尝试将它们插入到匿名结构中。这样它们就很容易被访问。
记住:。=参考指针-> =
最后,您在几个函数声明中更改了识别。尽量确保你所创建的函数是友好的。否则,您将无法使用它们。
注。子类的子类,它们需要访问器函数。它们必须通过向上继承来改变指针。所以你会想让祖父类的子类有一个类来改变它的指针。你可以用一个函数来访问子节点,在孙子节点中。这样你就回到了函数里。这就是它们之间的关系