Szablony klas - błąd przy tworzeniu obiektu (template argument list)
Ostatnio zmodyfikowano 2014-09-29 20:50
ubidragon Temat założony przez niniejszego użytkownika |
Szablony klas - błąd przy tworzeniu obiektu (template argument list) » 2014-09-28 12:14:51 Witam. Chciałem napisać program symulujący konto bankowe. Program miał być oparty na szablonach, żeby można było wykonywać operacje na różnych typach danych. Każda operacja opisana obiektem w szablonie zawierającym jej opis oraz kwotę. Konto też miało być szablonem i przechowywać wszystkie operacje w kontenerze danych STL. Niestety przy tworzeniu obiektu konta otrzymuje błąd error C2955: 'konto' : use of class template requires template argument list template < typename typ > class dochod { private: string opis; typ kwota; public: dochod( string _opis, typ kwota ); };
template < typename typ > dochod < typ >::dochod( string _opis, typ kwota ) { opis = _opis; kwota = _kwota; }
template < typename typ > class zwrot { private: string opis; typ kwota; public: zwrot( string _opis, typ kwota ); };
template < typename typ > zwrot < typ >::zwrot( string _opis, typ kwota ) { opis = _opis; kwota = _kwota; }
template < typename typ > class konto : public zwrot < typ > , public dochod < typ > { private: std::vector < typ > tablica; typ kwota; public: konto(); typ dodaj( typ operacja ) { tablica.push_back( operacja ); } };
template < typename typ > konto < typ >::konto() { kwota = 0; }
int main() { konto test(); _getch(); return 0; }
a przecież konto nie ma żadnych argumentów, jedynie domyślnie kwota wypełnia się 0. |
|
pekfos |
» 2014-09-28 12:35:43 |
|
colorgreen19 |
» 2014-09-28 12:39:03 a co jeśli pod typ dasz np. string? wtedy bedzie string kwota = 0; co raczej nie jest poprawne... |
|
ubidragon Temat założony przez niniejszego użytkownika |
» 2014-09-28 14:26:26 Zakładam tylko używanie typów liczbowych, dzięki szablonom będzie można wykonywać operacje zarówno int jak i float.
konto < Typ > test;
chodzi o tworzenie obiektu? |
|
pekfos |
» 2014-09-28 14:51:39 chodzi o tworzenie obiektu? |
Nie da się ukryć. |
|
ubidragon Temat założony przez niniejszego użytkownika |
» 2014-09-28 15:57:58 Tak, zadziałało :)
Pytanie, czy osobno muszę tworzyć obiekt każdej transakcji i potem dodawać je do konta, czy da się to zrealizować na inne sposoby? |
|
Jacob99 |
» 2014-09-28 16:42:06 Nie musisz tworzyć obiektu. Możesz stworzyć tablicę, vector, listę, itp. Zależy co chcesz konkretnie zrobić |
|
ubidragon Temat założony przez niniejszego użytkownika |
» 2014-09-28 17:42:12 W sumie to jest vector wewnątrz klasy konto i był zrobiony do przechowywania wszystkich wykonanych operacji na koncie. Chciałem jeszcze przeciążyć operator wyjścia strumienia << żeby wyświetlać wszelkie operacje dokonywane na koncie, ale nie cche działać ani się kompilować, kilka błędów, pewnie znowu coś źle robię template < typename typ > class konto : public zwrot < typ > , public dochod < typ > { private: std::vector < typ > tablica; typ kwota; public: konto(); typ dodaj( typ operacja ) { tablica.push_back( operacja ); } friend ostream & operator <<( ostream & wyjscie, const konto & wyj ); };
ostream & operator <<( ostream & wyjscie, const konto & wyj ) { for( int i = 0; i < wyj.tablica.size(); ++i ) { wyjscie << wyj.tablica[ i ] << endl; } return wyjscie; }
takie błędy otrzymuję: error C2662: 'std::vector<_Ty,_Ax>::size' : cannot convert 'this' pointer from 'const std::vector<typ>' to 'const std::vector<_Ty,_Ax> &' error C2678: binary '[' : no operator found which takes a left-hand operand of type 'const std::vector<typ>' (or there is no acceptable conversion) error C2955: 'konto' : use of class template requires template argument list |
|
« 1 » 2 3 |