-3

请告诉我代码有什么问题以及我应该更改什么来修复它(我收到编译错误):

#include <algorithm>
#include <cstring>
using namespace std;

const int MMAX = 1000001;


//--------------------------------------------------------------------------------------------
    inline bool comp(int &A, int &B) {
        if (A < B) return true;
        return false;
    }
template<typename _CompareFunction>
    struct myHeap { // min-heap
    _CompareFunction cmp;
    };
//--------------------------------------------------------------------------------------------

myHeap< comp > H;

int main() {

}

提前谢谢了!

编辑:编译错误:

heap_minimal.cpp:19:15: error: type/value mismatch at argument 1 in template parameter list for ‘template<class _CompareFunction> struct myHeap’
heap_minimal.cpp:19:15: error:   expected a type, got ‘comp’
heap_minimal.cpp:19:18: error: invalid type in declaration before ‘;’ token

(用 C++11 编译)

4

3 回答 3

1
myHeap< comp > H;

您应该将类​​型作为模板参数传递,而不是函数。将声明更改为以下内容:

myHeap<std::function<bool(int&, int&)>> H{comp};

或者

myHeap<decltype(comp)*> H{comp};

如果你只想传递模板参数(传递函数),你应该用重载声明类 MyComp operator()

struct MyComp
{
    bool operator() (int &A, int &B)
    {
        // if (A < B) return true;
        // return false;
        return A < B;
    }
};

然后作为参数传递:

myHeap<MyComp> H;
于 2013-05-31T14:18:44.917 回答
1

您在这里遇到的问题是在模板定义中

template<typename _CompareFunction>

_CompareFunction 是一个type,但是你尝试在其中使用 comp函数。但是你需要一个类型,所以你可以像这样修复错误:

myHeap< bool (*)(int&, int&) > H;

之所以有效,是因为 bool (*)(int&, int&) 是您的 comp 函数的一种。或者,您可以定义 myHeap 以将函数作为模板参数

template <bool (*fun)(int&, int&)>
struct myHeap2 
{      
};

然后你可以像这样使用它

myHeap2<comp> H2;
于 2013-05-31T14:36:41.357 回答
0

你应该定义一个类型使用“typedef bool (*comp)(int&, int&);” 声明,然后通过将 comp 类型作为模板参数传递来声明类,如您的代码:myHeap< comp > H;

于 2013-05-31T14:28:58.877 回答