Приватное поле char* из класса сортируется неккоректно

Рейтинг: 0Ответов: 0Опубликовано: 03.03.2023

Собственно говоря, проблема в том, что функция std::sort() сортирует массив объектов класса, но при сортировке приватное поле char* просто пропадает практически у всех объектов. По заданию нужно использовать именно char*. Вот фрагмент класса ниже.

class Credit {
private:
    char* Surname;
    string Name;
    string SecondName;
    unsigned long long int sum;
    double stavka;
    int lengthYear;
    long int percentSum;
public:
    static bool compSurname(const Credit& p1, const Credit& p2) { return strncmp(p2.Surname, p1.Surname, 255) > 0; }
    void SetThings(char* S, string N, string SN, unsigned long long int sm, double st, int leny) {
       Surname = new char[strlen(S) + 1];
       strcpy_s(Surname, strlen(S) + 1, S);
       Name = N;
       SecondName = SN;
       sum = sm;
       stavka = st;
       lengthYear = leny;
       CreditPlatezh(sum, stavka, lengthYear);
}
};

Сортировка вызывается из другого класса. Если вместо char* Surname представлен string Surname, то все сортируется адекватно.

    class CreditContainer {
private:
    int mas_len;
    Credit* mas;
public:
    void sort_all(CreditContainer m, const int& num) const
{
    int x = input();
    bool t = false;
    do {
        switch (x) {
        case(1):
            sort(m.mas, m.mas + num, Credit::compSurname);
            t = true;
            break;
        case(2):
            sort(mas, mas + num, Credit::compName);
            t = true;
            break;
        case(3):
            sort(mas, mas + num, Credit::compSecondName);
            t = true;
            break;
        case(4):
            sort(mas, mas + num, Credit::compSum);
            t = true;
            break;
        case(5):
            std::sort(mas, mas + num, Credit::compStavka);
            t = true;
            break;
        case(6):
            sort(mas, mas + num, Credit::compLength);
            t = true;
            break;
        case(7):
            sort(mas, mas + num, Credit::compPlatezh);
            t = true;
            break;
        default:
            errmsg();
            break;
            t = false;
        }
    } while (t == false);
}
    void Set_Mas_Things(int i, char* Surname, string Name, string SecondName, unsigned long long int sum, double stavka, int len) {
        if (i < mas_len) {
            mas[i].SetThings(Surname, Name, SecondName, sum, stavka, len);
    }
}
};

Вот что происходит с полями Surname после сортировки.

Ответы

Ответов пока нет.