Я не очень хорошо понял, как работает Predicate, тогда мой вопрос мог быть глупым или плохо написанным.
Я написал этот класс:
namespace Ableton {
struct DeferencedEqual{
DeferencedEqual(const Marker* compare_to) : compare_to_(compare_to) { }
bool operator()(Marker* c1) const {return *c1 == *compare_to_;}
private:
const Marker* compare_to_;
};
struct DeferencedCompare{
bool operator()(Marker* const* p1, Marker* const* p2){return p1<p2;}
};
class MarkerContainer {
private:
std::list<Marker*> list;
double end_t;
inline bool exists(std::list<Marker*> *input_list, Marker* check);
// inline int computeInterval(double to_convert, bool beat_t=true);
public:
MarkerContainer();
MarkerContainer(double end_time);
bool addMarker(Marker* input);
double computeBeatTime(double sample_t);
double computeSampleTime(double beat_t);
void printAll();
void sort();
};
}
И это моя реализация класса .cpp (просто раздел, в котором я интересуюсь):
namespace Ableton {
void MarkerContainer::sort(){
std::sort(list.begin(), list.end(),DeferencedCompare());
}
}
Я получил эту ошибку компилятора:
/ usr / include / c ++ / 4.2.1 / bits / stl_algo.h: 2867: 22: {2867: 15-2867: 21} {2867: 24-2867: 31}: ошибка: недопустимые операнды в двоичное выражение ('std :: _ List_iterator' и 'std :: _ List_iterator') [2]
Есть идеи?
Заранее спасибо.
Редактировать один
Привет, я следую вашим предложениям, у меня есть еще одна проблема.
namespace Ableton {
struct DeferencedEqual{
DeferencedEqual(const Marker* compare_to) : compare_to_(compare_to) { }
bool operator()(Marker* c1) const {return *c1 == *compare_to_;}
private:
const Marker* compare_to_;
};
bool compare(Marker* const p1, Marker* const p2){return p1<p2;}
class MarkerContainer {
private:
std::list<Marker*> list;
double end_t;
inline bool exists(std::list<Marker*> *input_list, Marker* check);
// inline int computeInterval(double to_convert, bool beat_t=true);
public:
MarkerContainer();
MarkerContainer(double end_time);
bool addMarker(Marker* input);
double computeBeatTime(double sample_t);
double computeSampleTime(double beat_t);
void printAll();
void sort();
};
}
Функция сортировки теперь:
namespace Ableton {
void MarkerContainer::sort(){
list.sort(compare);
}
}
А мой main.cpp:
include "Marker.h"
include "MarkerContainer.h"
include <iostream>
include <list>
include <string>
include <cctype>
using namespace std;
int main (int argc, const char * argv[])
{
Ableton::MarkerContainer::MarkerContainer container = Ableton::MarkerContainer::MarkerContainer(10.0);
Ableton::Marker::Marker* one = new Ableton::Marker::Marker(1.0, 1.0);
Ableton::Marker::Marker* two = new Ableton::Marker::Marker(2.0, 1.0);
Ableton::Marker::Marker* three = new Ableton::Marker::Marker(3.0, 1.0);
if(!container.addMarker(one))
cout << *one << "NOT Added" << endl;
if(!container.addMarker(two))
cout << *two << "NOT Added" << endl;
if(!container.addMarker(three))
cout << *three << "NOT Added" << endl;
cout << "-- LIST " << endl;
container.printAll();
cout << "-- LIST after sort" << endl;
//container.printAll();
}
Теперь я улавливаю эту ошибку ld, она звучит странно для меня ... нет пути для меня в C ++? : -)
ld: дубликат символа Ableton :: Сравнить (Ableton :: Marker *, Ableton :: Marker *) в /..../MarkerContainer.o и /..../main.o для архитектуры x86_64
clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)
Сбой команды / разработчика / usr / bin / clang ++ с кодом выхода 1
Еще раз спасибо заранее, можете ли вы предложить мне какую-нибудь книгу о STL и о том, как она работает "под землей", чтобы лучше понять, что произошло в этих случаях с технической точки зрения
pedr0