Chyba jednak nie za bardzo rozumiem klasy... Zrobiłem sobie takie ćwiczenie, chyba proste, ale guzik z tego...
#include <iostream>
#include <string>
#include <list>
using namespace std;
class sklep
{
bool por_stringi(const string &a, const string &b)
{
string::const_iterator at=a.begin(), bt=b.begin();
while(at!=a.end()&&bt!=a.end())
if(at==a.end()) return true;
else if(bt==b.end()) return false;
else if(*at<*bt) return true;
else if(*at>*bt) return false;
return false;
}
struct zabawka
{
string nazwa;
int cena;
bool comp (const zabawka &a, const zabawka &b)
{return (por_stringi(a.nazwa,b.nazwa));}
zabawka(const string &n, int c)
{nazwa=n; cena=c;}
};
struct gra_planszowa
{
string nazwa;
int cena;
int noty_w_recenzjach;
bool comp (const gra_planszowa &a, const gra_planszowa &b)
{return (por_stringi(a.nazwa,b.nazwa));}
gra_planszowa(string &n, int c, int r)
{nazwa=n;cena=c;noty_w_recenzjach=r;}
};
list<zabawka> zabawki; list<gra_planszowa> gry;
public:
void dod_zabawka (const string &nazwa, int cena)
{zabawka hlp(nazwa,cena); zabawki.push_back(hlp); return;}
void dod_gra (const string &nazwa, int cena, int nota)
{gra_planszowa hlp(nazwa,cena,nota); gry.push_back(hlp); return;}
void drukZabawki()
{
zabawki.sort(zabawka::comp);
for(list<zabawka>iterator it=zabawki.begin();it!=zabawki.end();++it)
cout << nazwa << " kosztuje " << cena << " zl.\n";
return;
}
void drukGry()
{
gry.sort(gra_planszowa::comp);
for(list<gra_planszowa>iterator it=gry.begin();it!=gry.end();++it)
cout << nazwa << " kosztuje " << cena
<< " zl, a w recenzji otrzymala ocene " << noty_w_recenzjach
<< " .\n";
return;
}
} s;
int main()
{
s.dod_zabawka ("samochodzik", 300); s.dod_zabawka ("mis pluszowy", 50);
s.dod_zabawka ("klocki Lego", 200); s.dod_zabawka ("pilka", 20);
s.drukZabawki(); return 0;
}
prog.cpp: In member function ‘bool sklep::zabawka::comp(const sklep::zabawka&, const sklep::zabawka&)’:
prog.cpp:24:49: error: cannot call member function ‘bool sklep::por_stringi(const string&, const string&)’ without object
{return (por_stringi(a.nazwa,b.nazwa));}
^
prog.cpp: In member function ‘bool sklep::gra_planszowa::comp(const sklep::gra_planszowa&, const sklep::gra_planszowa&)’:
prog.cpp:34:49: error: cannot call member function ‘bool sklep::por_stringi(const string&, const string&)’ without object
{return (por_stringi(a.nazwa,b.nazwa));}
^
prog.cpp: In member function ‘void sklep::dod_gra(const string&, int, int)’:
prog.cpp:45:43: error: no matching function for call to ‘sklep::gra_planszowa::gra_planszowa(const string&, int&, int&)’
{gra_planszowa hlp(nazwa,cena,nota); gry.push_back(hlp); return;}
^
prog.cpp:45:43: note: candidates are:
prog.cpp:35:9: note: sklep::gra_planszowa::gra_planszowa(std::string&, int, int)
gra_planszowa(string &n, int c, int r)
^
prog.cpp:35:9: note: no known conversion for argument 1 from ‘const string {aka const std::basic_string<char>}’ to ‘std::string& {aka std::basic_string<char>&}’
prog.cpp:28:12: note: sklep::gra_planszowa::gra_planszowa(const sklep::gra_planszowa&)
struct gra_planszowa
^
prog.cpp:28:12: note: candidate expects 1 argument, 3 provided
prog.cpp: In member function ‘void sklep::drukZabawki()’:
prog.cpp:49:31: error: invalid use of non-static member function ‘bool sklep::zabawka::comp(const sklep::zabawka&, const sklep::zabawka&)’
zabawki.sort(zabawka::comp);
^
prog.cpp:50:35: error: expected ‘;’ before ‘it’
for(list<zabawka>iterator it=zabawki.begin();it!=zabawki.end();++it)
^
prog.cpp:50:35: error: ‘it’ was not declared in this scope
prog.cpp:50:71: error: expected ‘)’ before ‘;’ token
for(list<zabawka>iterator it=zabawki.begin();it!=zabawki.end();++it)
^
prog.cpp:50:74: error: ‘it’ was not declared in this scope
for(list<zabawka>iterator it=zabawki.begin();it!=zabawki.end();++it)
^
prog.cpp:50:76: error: expected ‘;’ before ‘)’ token
for(list<zabawka>iterator it=zabawki.begin();it!=zabawki.end();++it)
^
prog.cpp: In member function ‘void sklep::drukGry()’:
prog.cpp:56:33: error: invalid use of non-static member function ‘bool sklep::gra_planszowa::comp(const sklep::gra_planszowa&, const sklep::gra_planszowa&)’
gry.sort(gra_planszowa::comp);
^
prog.cpp:57:41: error: expected ‘;’ before ‘it’
for(list<gra_planszowa>iterator it=gry.begin();it!=gry.end();++it)
^
prog.cpp:57:41: error: ‘it’ was not declared in this scope
prog.cpp:57:69: error: expected ‘)’ before ‘;’ token
for(list<gra_planszowa>iterator it=gry.begin();it!=gry.end();++it)
^
prog.cpp:57:72: error: ‘it’ was not declared in this scope
for(list<gra_planszowa>iterator it=gry.begin();it!=gry.end();++it)
^
prog.cpp:57:74: error: expected ‘;’ before ‘)’ token
for(list<gra_planszowa>iterator it=gry.begin();it!=gry.end();++it)
^
O co tu chodzi?