Сравнение C++ с библиотекой LEDA
Я пытаюсь создать набор с использованием библиотеки LEDA... Я добавляю элементы класса, который имеет compare()
метод, определенный в пространстве имен LEDA... К сожалению, компилятор не может найти функцию сравнения для этого класса... Вот сообщение об ошибке...
/home/user/Desktop/leda/incl/LEDA/core/set.h:
In constructor ‘leda::set<E, set_impl>::set() [with E = Operator*, set_impl = leda::avl_tree]’:
../src/suite.cc:52: instantiated from here /home/user/Desktop/leda/incl/LEDA/core/set.h:71: error: no matches converting function ‘compare’ to type ‘int (*)(class Operator* const&, class Operator* const&)’
/home/user/Desktop/leda/incl/LEDA/internal/param_types.h:351: error: candidates are: int leda::compare(const char&, const char&)
/home/user/Desktop/leda/incl/LEDA/internal/param_types.h:352: error: int leda::compare(const unsigned char&, const unsigned char&)
/home/user/Desktop/leda/incl/LEDA/internal/param_types.h:353: error: int leda::compare(const int&, const int&)
/home/user/Desktop/leda/incl/LEDA/internal/param_types.h:354: error: int leda::compare(const unsigned int&, const unsigned int&)
/home/user/Desktop/leda/incl/LEDA/internal/param_types.h:355: error: int leda::compare(const long int&, const long int&)
/home/user/Desktop/leda/incl/LEDA/internal/param_types.h:356: error: int leda::compare(const long unsigned int&, const long unsigned int&)
/home/user/Desktop/leda/incl/LEDA/internal/param_types.h:357: error: int leda::compare(const float&, const float&)
/home/user/Desktop/leda/incl/LEDA/internal/param_types.h:358: error: int leda::compare(const double&, const double&)
/home/user/Desktop/leda/incl/LEDA/core/string.h:382: error: int leda::compare(const leda::string&, const leda::string&)
ЛЕДА требует compare()
Метод должен быть определен для элементов set
,
Suite::Suite (set<Operator*> *ops)
: operators(ops!=NULL ? ops : new set<Operator*>)
{
У меня есть этот метод сравнения, определенный в соответствии с требованиями LEDA...
namespace leda {
inline int compare (Operator* const &a, Operator* const &b)
{
return a==b ? 0 : a<b ? -1 : 1;
}
};
Но он все еще не может найти его в set.h библиотеки ЛЕДА здесь.
set() { cmp_ptr = compare; }
Он пытается найти указатель на compare()
метод и назначает его cmp_ptr
... но не могу найти это...
Я определил метод, но каким-то образом он не распознается?
Обновление: у меня, кажется, есть эта проблема со всеми compare()
определения.... включая другие классы в множествах..
2 ответа
Прикрепив гораздо более простой пример, который воспроизводит ту же ошибку... Для этого вам нужно будет скачать бесплатную версию библиотеки LEDA... но использовать ее безболезненно... http://www.algorithmic-solutions.com/leda/ledak/index.htm
Это заголовочный файл... pair.h
#include <istream>
#include <LEDA/core/set.h>
using leda::set;
class pair {
private:
int x;
int y;
public:
pair() { x = y = 0; }
pair(const pair& p) { x = p.x; y = p.y; }
pair& operator=(const pair& p) {
if(this != &p) { x = p.x; y = p.y; }
return *this;
}
friend std::istream& operator>> (std::istream& is, pair& p)
{ is >> p.x >> p.y; return is; }
friend std::ostream& operator<< (std::ostream& os, const pair& p)
{ os << p.x << " " << p.y; return os; }
pair(int a, int b) { x = a; y = b; }
int get_x() const { return x; }
int get_y() const { return y; }
};
namespace leda {
inline int compare(const pair& p, const pair& q)
{
if (p.get_x() < q.get_x()) return -1;
if (p.get_x() > q.get_x()) return 1;
if (p.get_y() < q.get_y()) return -1;
if (p.get_y() > q.get_y()) return 1;
return 0;
}
};
Это основной C++ файл pair.cc
#include<pair.h>
using std::cout;
using std::endl;
main() {
set<pair> T;
cout<<"Hello world"<<endl;
}
Просто скомпилируйте их, используя следующую команду:
g++ -I$LEDA_INCLUDE_PATH -I$PATH_TO_PAIR.H pair.cc
Хорошо, ошибка была странной! Метод compare() должен быть определен до включения заголовков LEDA....