Я пишу код для экзамена и сталкиваюсь с одной проблемой. Я сделал пропуск в тренажерный зал, у которого есть дата истечения срока действия (int waznos c), цена пропуска (float cena) и имя его владельца (string dane). В нем также есть услуги (char uslugi), где 0 - это базовая c, 1 - с бесплатными душевыми, а 2 - это VIP-комната (это просто пример кода для моего экзамена).
Вот определение класса ( комментарии находятся в poli sh):
class Karnet
{
int waznosc; //ilosc dni
char uslugi; //0 - podstawowy, 1 - prysznic, 2 - sala VIP
float cena = ((int)uslugi - 47) * waznosc; //ilosc dni * pakiet uslug, np. podstawowy na miesiac to 30 * 1, a z sala VIP na 3 miesiace to 90 * 3 = 270
string dane; //imie_nazwisko kupujacego
public:
Karnet() //podstawowy konstruktor
{
cout << "this: " << this;
waznosc = 0;
uslugi = '0';
cena = 0;
dane = "Lorem ipsum";
}
Karnet(int waznosc, char uslugi, string dane) //konstruktor z parametrami
{
this->waznosc = waznosc;
this->uslugi = uslugi;
this->dane = dane;
}
void wypisz()
{
cout << "Karnet: ";
switch (uslugi)
{
case '0':
{
cout << "Podstawowy dostep do silowni, ";
}
case '1':
{
cout << "Pakiet silownia + prysznice, ";
}
case '2':
{
cout << "Luksusowy pakiet ze specjalna sala VIP, ";
}
default:
{
cout << "Blad."; //nie powinien nigdy default wystapic
}
}
cout << "wazny " << waznosc << " dni, koszt " << cena << " zl." << endl;
}
void wpisz()
{
cout << "Wybierz pakiet uslug: \n0 - podstawowy\n1 - darmowe prysznice\n2 - specjalna sala vip";
{
char temp{};
do
{
cin >> temp;
if (!((int)temp > 47 & (int)temp < 51)) cout << endl << "Prosze wpisac cyfre odpowiadajaca pakietowi uslug...";
} while (!((int)temp > 47 & (int)temp < 51));
this->uslugi = temp;
}
cout << endl << "Podaj ilosc dni, na ktora chcesz wykupic karnet: ";
cin >> this->waznosc;
cout << endl << "Podaj swoje imie i nazwisko: ";
cin >> this->dane;
}
void przedluz(int oile)
{
cout << "Przedluzenie waznosci o " << oile << " dni bedzie kosztowac " << oile * ((int)this->uslugi - 47) << ", kontynuowac? (t/n) ";
char temp{};
if (temp != 't') return;
this->waznosc += oile;
}
friend bool operator==(const Karnet& lhs, const Karnet& rhs)
{
if (lhs.cena != rhs.cena) return false;
if (!(lhs.dane._Equal(rhs.dane))) return false;
if (lhs.uslugi != rhs.uslugi) return false;
if (lhs.waznosc != rhs.waznosc) return false;
return true;
}
};`
Я также создал класс, который в основном является вектором моих классов Ka rnet. Я пытаюсь сделать функцию void для удаления одного ka rnet, но стирание выдает ошибку:
no instance of overloaded function "std::vector<_Ty, _Alloc>::erase [with _Ty=Karnet, _Alloc=std::allocator<Karnet>]" matches the argument list
Как хороший программист, я много часов гуглил , но безуспешно. Вот определение гимнастического класса (silownia)
class silownia
{
vector <Karnet> Stali_Klienci;
public:
void dodaj(Karnet karnet)
{
Stali_Klienci.push_back(karnet);
}
void usun(Karnet karnet)
{
for (int i = 0; i < Stali_Klienci.size(); i++)
{
if (Stali_Klienci[i] == karnet) Stali_Klienci.erase(i);
}
}
};
void usun - это функция удаления, при которой я получаю сообщение об ошибке. Скажите, нужно ли мне переводить какие-либо комментарии, но они изучают комментарии, а не комментарии о том, что делает алгоритм. У меня есть вся программа, все, что мне нужно, это исправить эту часть.