2016-11-06 68 views
0

我有一種情況,我不允許修改我的類的頭文件。我想添加一個輔助函數來與我的一個函數一起使用......但不能完全弄清楚實現它的正確方法。通常我嘗試谷歌,但沒有找到任何幫助。定義和使用不在頭文件中的私有方法

這裏是我當前的代碼:

template<typename T> 
void Set<T>::doubleRotateRight(Elem *& node) { 
    // you fill in here 
    rotateRight(node->left); 
    rotateLeft(node); 

    //call private helper not defined in header 
    privmed(); 

} 
void privmed(){ 
    //out << "who" << endl; 
} 

然而,當我運行此我得到的錯誤:

error: there are no arguments to ‘privmed’ that depend on a template parameter, so a declaration of ‘privmed’ must be available [-fpermissive] 
    privmed(); 

任何幫助,這將是令人難以置信!

+0

在C++中的所有東西都必須在使用之前聲明。你有沒有嘗試將'privmed'函數實現移到'doubleRotateRight'函數之前? –

+0

投票結束爲**不明**。需要關於什麼可以被修改和什麼不能被修改的信息;需要關於'privmed'意味着什麼的信息;需要關於目標的信息。 –

+0

cmon ....非常感謝 –

回答

1

你可以只使用lambda:

template<typename T> 
void Set<T>::doubleRotateRight(Elem *& node) 
{ 
    static auto const privmed = []() -> void 
    { 
     //out << "who" << endl; 
    }; 

    // you fill in here 
    rotateRight(node->left); 
    rotateLeft(node); 

    //call private helper not defined in header 
    privmed(); 
} 
+0

沒有機會我可以稱之爲recurisvely呢? –

+0

好吧,然後聲明一個本地類並在該類中使用'static'成員函數。 –

+0

或者,根據你的意思,你可能會用lambda調用'doubleRotateRight'函數或者其他函數來調用它。沒有一個非常具體的問題很難畫出解決方案。但任何遞歸都是可行的:如何做到這一點取決於它是什麼。 –

1

我認爲問題是,你有你使用它之前,像這樣來定義「privmed()」函數:

void privmed(){ 
    //out << "who" << endl; 
} 

template<typename T> 
void Set<T>::doubleRotateRight(Elem *& node) { 
    // you fill in here 
    rotateRight(node->left); 
    rotateLeft(node); 

    //call private helper not defined in header 
    privmed(); 
} 
+0

同樣的錯誤:(和以前一樣 –

+0

據我所知,這與OP限制做的頭文件混淆。 –

相關問題