请告诉我代码有什么问题,我应该修改什么来解决它(我收到编译错误):
#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编译)
答案 0 :(得分:1)
myHeap< comp > H;
您应该将类型作为模板参数传递,而不是函数。将声明更改为以下内容:
myHeap<std::function<bool(int&, int&)>> H{comp};
或者
myHeap<decltype(comp)*> H{comp};
如果你想传递 only 模板参数(不传递函数),你应该用超载的operator()
声明类MyComp:
struct MyComp
{
bool operator() (int &A, int &B)
{
// if (A < B) return true;
// return false;
return A < B;
}
};
然后只传递参数:
myHeap<MyComp> H;
答案 1 :(得分:1)
您遇到的问题是模板定义
template<typename _CompareFunction>
_CompareFunction是类型,但是您尝试在其中使用comp function 。但是你需要一个类型,所以你可以像这样修复错误:
myHeap< bool (*)(int&, int&) > H;
这是有效的,因为bool(*)(int&amp;,int&amp;)是你的comp函数的一种类型。 或者,您可以定义myHeap以将函数作为模板参数
template <bool (*fun)(int&, int&)>
struct myHeap2
{
};
然后你可以像这样使用它
myHeap2<comp> H2;
答案 2 :(得分:0)
你应该定义一个类型使用“typedef bool(* comp)(int&amp;,int&amp;);”语句然后通过传递comp类型作为模板参数来声明类,就像你的代码:myHeap&lt; comp&gt; H;