2016-04-27 122 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());