Всем привет, следующая задача.
Есть колода карт. Карту я реализовал как класс с двумя полями (масть, ранг). Создать колоду на 36 карт (успешно), перемешать ее (успешно), потом записать их в стек (успешно), после чего взять шесть карт и записать в список (успех), а потом отсортировать список (вот и сам вопрос).
В общем, сам класс я сделал так:
Код | class tCard // Class of cards { public: int Suit; int Rang; tCard (int tSuit = 1, int tRang = 1) // Constructor { Suit = tSuit; Rang = tRang; } friend std::ostream &operator<<(std::ostream &output, tCard &P) { string s[] ={"Крест", "Пика", "Черва", "Бубна"} ; string sRang[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Валет", "Дама", "Король", "Туз"}; output<<setw(5)<<s[P.Suit]<<setw(11)<<sRang[P.Rang]<<endl; return output;}; };
|
Перегрузил операторы сравнения
Код | bool operator> (tCard a1, tCard a2) { if (a1.Suit>a2.Suit) { return true; } else return a1.Rang>a2.Rang; };
bool operator< (tCard a1, tCard a2) { if (a1.Suit<a2.Suit) { return true; } else return a1.Rang<a2.Rang; }; bool operator== (tCard a1, tCard a2) { if ((a1.Suit==a2.Suit) &&(a1.Rang==a2.Rang)) { return true; } else return false ; }
|
Вот место, где выдает ошибку. Ошибку выдает уже на самом этапе выполнения программы
Код | for (int i=0; i<6; i++) // Тут я 6 карт достаю из колоды и в список { l1.push_back(stDeckCards.top()); stDeckCards.pop(); } // Выводим на экран cout<<"Верхние 6 карт\n"; list<tCard>::iterator p=l1.begin(); for (int i=0; i<6; i++) { cout<<*p; p++; } // Вот тут все попытки отсортировать его завершались неудачей. cout<<"Сортировка списка\n"; list<tCard>::iterator p2 = l1.end(); p = l1.begin(); l1.sort(); //Не работает, так же как и если взять просто алгоритм и написать sort (p, p2), только в случае с алгоритмом ошибка на этапе компиляции for (int i=0; i<6; i++) { cout<<*p; p++; }
|
А сама ошибка:
|