Приватное поле char* из класса сортируется неккоректно
Собственно говоря, проблема в том, что функция 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);
}
}
};
Источник: Stack Overflow на русском