функтор в заголовочном файле - PullRequest
0 голосов
/ 22 августа 2011

У меня есть следующий функтор, и я включил его в основную программу

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 ]

6 голосов
/ 22 августа 2011

Исходная ошибка, вероятно, с binary_function: отсутствует включение или не учитывается, что оно находится в пространстве имен std.

#include <functional>

и

std::binary_function<T, T, int>
4 голосов
/ 22 августа 2011

template<class T> T Comp: public binary_function<T, T, int> неверный синтаксис, первый правильный.Ошибка, вероятно, о binary_function - убедитесь, что вы включили заголовок, и он должен быть std::binary_function.

Кроме того, binary_function в значительной степени бесполезен, особенно в C ++ 11.

3 голосов
/ 22 августа 2011
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;
 }
};
...