我有以下仿函数,并且已将其包含在我的主程序中
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
关于我如何解决它的任何建议?谢谢!
答案 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;
}
};