У меня есть база class
и суб-class
, которая наследует его. Я переопределил операторы <
, >
, <=
и >=
в базе class
, с целью std::sort
использования vector
с этим классом. Когда я std::sort
, я делаю это, вызывая std::sort(my_vector.begin(), my_vector.end())
.
Однако я продолжаю получать ошибку invalid operands to binary expression ('const my_sub_class' and 'const my_sub_class')
. Я также получаю около 8 ошибок и целое эссе ошибок на каждое место, где я пытаюсь реализовать сортировку. Например, я получаю in instantiation of member function 'std::__1::greater<my_sub_class>::operator()' requested here, if (__comp(*--__last, *__first))
, который, кажется, является различными подфункциями.
Я надеюсь, что я только что пропустил включение, но кроме #include <vector>
(d'uh) и #include <algorithm>
Iне могу понять, что еще мне нужно. Я пробовал перегруженные операторы отдельно через if
, и они работают. vector<my_sub_class>
тоже работает. Я также пробовал различные решения, такие как перегрузка операторов в подклассе и предоставление явной функции сортировки (например, greater<my_sub_class>
, собственные функции, обратный порядок сортировки через rbegin()
и rend()
), но ничего не кажетсяработать (хотя некоторые из моих решений выдают разные ошибки (слишком разные, чтобы включать все здесь).
РЕДАКТИРОВАТЬ:
Вот некоторый код, который воспроизводит файл заголовка ошибки:
#ifndef H_DEBUGGING
#define H_DEBUGGING
class my_class {
public:
void set_value(int in_value);
int get_value();
bool operator < (const my_class & in_my_class);
bool operator > (const my_class & in_my_class);
// Some other stuff
protected:
int mValue;
my_class();
// Some other stuff
};
class my_sub_class: public my_class {
public:
my_sub_class();
// Some other stuff
protected:
// Some other stuff
};
void debug_custom_class_vector();
#endif
Файл класса:
#include <algorithm>
#include <iostream>
#include <vector>
#include "Debugging.hpp"
my_class::my_class() {
}
void my_class::set_value(int in_value) {
mValue = in_value;
}
int my_class::get_value() {
return mValue;
}
bool my_class::operator < (const my_class & in_my_class) {
return mValue < in_my_class.mValue;
}
bool my_class::operator > (const my_class & in_my_class) {
return mValue > in_my_class.mValue;
}
my_sub_class::my_sub_class() {
}
void debug_custom_class_vector() {
my_sub_class sub_a, sub_b, sub_c;
sub_a.set_value(2);
sub_b.set_value(1);
sub_c.set_value(3);
std::vector<my_sub_class> my_custom_vector;
my_custom_vector.push_back(sub_a);
my_custom_vector.push_back(sub_b);
my_custom_vector.push_back(sub_c);
std::cout << "Unsorted: " << std::endl;
for (int i = 0; i < 3; i++) {
std::cout << i << ": " << my_custom_vector[i].get_value() << std::endl;
}
// std::sort(my_custom_vector.begin(), my_custom_vector.end(), std::greater<my_sub_class>());
std::cout << "Sorted: " << std::endl;
for (int i = 0; i < 3; i++) {
std::cout << i << ": " << my_custom_vector[i].get_value() << std::endl;
}
}
// Some other stuff
Когда я запускаюсь с основного, я получаю:
Unsorted:
0: 2
1: 1
2: 3
Sorted:
0: 2
1: 1
2: 3
и когда я раскомментирую строку std::sort
в файле класса я получаю ошибку.
Что я могу сделать, чтобы ее решить?