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 |