Не могу перегрузить оператор “<” для класса

306
21 февраля 2018, 10:59
#include "stdafx.h"
#include "iostream"
#include "string"
#include <set>
#include <algorithm>
using namespace std;
class student {
public:
bool operator< (student &ob2) {
        return true;
    }
    student() {
        a = 0;
        fio = "Kolesnikov Vadim Sergeevich";
        vuz = "PSU";
        fac = "Facultet";
        kaf = "Kafedra";
        f_o = "Ochka\Zaochka";
    }
    student(char *fio1, int a1) {
        a = a1;
        fio = fio1;
        vuz = "VUZ";
        fac = "Facultet";
        kaf = "Kafedra";
        f_o = "Ochka\Zaochka";
    }
    ~student() {};
    void output() {
        cout << fio.c_str() << endl;
        cout << vuz.c_str() << endl;
        cout << fac.c_str() << endl;
        cout << kaf.c_str() << endl;
        cout << f_o.c_str() << endl << endl;
    }
    void input() {
        cout << "FIO:";
        cin >> fio;
        cout << "vuz:";
        cin >> vuz;
        cout << "fac:";
        cin >> fac;
        cout << "kaf:";
        cin >> kaf;
        cout << "f_o:";
        cin >> f_o;
        cout << endl;
    }
protected:
    string kaf;
    string f_o;
    int a;
private:
    string fio;
    string vuz;
    string fac;
};

void main(void)
{
    char str0[] = "Potogin Nikita";
    char str1[] = "Sidelnikov Maxim";
    char str2[] = "Kolesnikov Vadim";
    char str3[] = "Fedoseev Gena";
    student ob0(str0,1);
    student ob1(str1,2);
    student ob2(str2,3);
    student ob3(str3,4);
    ob0.output();
    multiset<student> list;
    multiset<student>::iterator it;
    list.insert(ob0);
    list.insert(ob1);
    list.insert(ob2);
    list.insert(ob3);
    system("pause");
}
Answer 1
  • Необходимости засовывать оператор в класс не было. Наоборот, правильнее перегружать такой оператор отдельной функцией.

    В любом случае, оба параметра оператора сравнения должны быть константными

    bool operator< (const student &ob2) const {
         return true;
    }
    
  • Оператор сравнения, который всегда return true; - грубое нарушение требований, накладываемых на оператор сравнения. Работать не будет.

  • Что такое

    #include "iostream"
    #include "string"
    

    ? При включении стандартных заголовков, скобки должны быть только треугольными.

  • int main, а не void main.

Answer 2

Основная ошибка

operator< должен принимать константные ссылки

bool operator< (const student &ob1, const student &ob2)

И, само собой, он не должен быть тривиальным.

По мелочи

f_o = "Ochka\\Zaochka";

Бекслеши в строковых константах надо удваивать

int main(void)

main () надо декларировать с int, а не void и возвращать 0.

Answer 3

нужны константные ссылки

bool operator< (const student &ob1, const student &ob2) {
    return true;
}

или использовать lamda:

int main(void)
{
    char str0[] = "Potogin Nikita";
    char str1[] = "Sidelnikov Maxim";
    char str2[] = "Kolesnikov Vadim";
    char str3[] = "Fedoseev Gena";
    student ob0(str0,1);
    student ob1(str1,2);
    student ob2(str2,3);
    student ob3(str3,4);
    ob0.output();
    // вместо просто возврата true, наверное должно возвращаться что-то осмысленное
    auto comp = [](const student& lst, const student& rst){ return true; };
    typedef multiset<student, decltype(comp)> myset;
    myset list(comp);
    myset::iterator it;
    list.insert(ob0);
    list.insert(ob1);
    list.insert(ob2);
    list.insert(ob3);
    system("pause");
}
READ ALSO
Qt и QML. Как заполнить GridView информацией с БД

Qt и QML. Как заполнить GridView информацией с БД

У меня есть проблема, я реализовал вывод данных с БД в С++ в qml почти как в этом видео https://wwwyoutube

224
замена знака минус на тильду в QString c++ qt

замена знака минус на тильду в QString c++ qt

есть выражение например -5+(-12)-25 надо заменить все минус симвилы отрицательных чисел на знак ~ результат ~5+(~12)-25 помогите заменить

195
структура в очереди

структура в очереди

Есть очередь, есть структураСтруктура помещается в очередь

201
Управление процессами Linux C++

Управление процессами Linux C++

Пишу программу,которая должна запускать несколько процессов и выполнять конкретную манипуляцию с нимиЦель: запустить несколько процессов,...

258