头文件中的仿函数

时间:2011-08-22 16:42:54

标签: c++ functor

我有以下仿函数,并且已将其包含在我的主程序中

template<class T> struct Comp: public binary_function<T, T, int>
{
 int operator()(const T& a, const T& b) const
 {
   return (a>b) ? 1: (a<b) ? -1 :0;
 }
};

当它在.cpp中时没有给出任何错误,但现在当我将它移动到我的.h时,它给了我以下错误:

testclass.h: At global scope:
testclass.h:50:59: error: expected template-name before ‘<’ token
testclass.h:50:59: error: expected ‘{’ before ‘<’ token
testclass.h:50:59: error: expected unqualified-id before ‘<’ token

所以,我把它重写为:

template<class T> T Comp: public binary_function<T, T, int>
{
 int operator()(const T& a, const T& b) const
 {
   return (a>b) ? 1: (a<b) ? -1 :0;
 }
};

现在我收到以下错误:

testclass.h: At global scope:
testclass.h:50:30: error: expected initializer before ‘:’ token

关于我如何解决它的任何建议?谢谢!

3 个答案:

答案 0 :(得分:6)

原始错误可能是binary_function:错过了包含或未考虑它位于命名空间std中。

#include <functional>

std::binary_function<T, T, int>

答案 1 :(得分:4)

template<class T> T Comp: public binary_function<T, T, int>语法不正确,第一个是正确的。该错误可能大约为binary_function - 请确保您已包含标题,且该标题应为std::binary_function

此外,binary_function基本上没用,特别是在C ++ 11中。

答案 2 :(得分:3)

template<class T> T Comp : public binary_function<T, T, int>
               //^^^ what is this?
那是什么?这应该是struct(或class)。

另外,您是否忘记包含<functional>定义了binary_function的头文件?

包括<functional>。并使用std::binary_function代替binary_function

#include <functional> //must include

template<class T> struct Comp: public std::binary_function<T, T, int>
{                                   //^^^^^ qualify it with std::
 int operator()(const T& a, const T& b) const
 {
   return (a>b) ? 1: (a<b) ? -1 :0;
 }
};