2016-04-27 109 views
-1

我嘗試編寫通用樹。我添加了函數對象來比較頂點的值。但我有問題:通用對象和函數對象

頭文件中的相關部分:

template <typename T,typename Func> 

.....

void addData(T dataIn,Func condition){ 

主要:

#include "gentree.h" 
class compare_int { 
public: 
    int operator()(int a,int b){ 
     if (a==b) return 0; 
     else if (a>b) return -1; 
     else return 1; 

    } 
}; 
using namespace std; 

int main() { 
    genTree<int,compare_int> new_tr(5); 
    new_tr.addData(3,compare_int); 
    return 0; 
} 

我得到的錯誤此行:

new_tr.addData(3,compare_int); 

錯誤是: 「預期的主要表達式之前」)「標記」和「無效參數」「 任何想法?

+0

順便說一句,你可能想'Func'是在構造函數中,而不是在'addData'說法。 – Jarod42

回答

0

您將類型作爲參數傳遞而不是對象。必須創建所述compare_int類型的對象,並將它傳遞喜歡:

compare_int comparator; 
new_tr.addData(3, comparator); 
1

在表達式new_tr.addData(3,compare_int); 3是一個值,但compare_int是一種類型。您不能將類型作爲參數傳遞給函數。

您可以創建一個單獨的值,或通過一個臨時的比較對象,像

new_tr.addData(3,compare_int());