Szablony klas - błąd przy tworzeniu obiektu (template argument list)
Ostatnio zmodyfikowano 2014-09-29 20:50
pekfos |
» 2014-09-28 20:35:48 pewnie znowu coś źle robię
|
I do tego to samo co wcześniej. Lepiej doczytaj, jak się poprawnie używa szablonów. |
|
ubidragon Temat założony przez niniejszego użytkownika |
» 2014-09-28 21:31:43 Chyba już załapałem 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 ); }; template < typename typ > ostream & operator <<( ostream & wyjscie, const konto < typ > & wyj ) { for( int i = 0; i < wyj.tablica.size(); ++i ) { wyjscie << wyj.tablica[ i ] << endl; } return wyjscie; }
program się kompiluje, tylko czy pod względem logicznym jest to poprawnie? Rozumiem, że jak dostaje błąd typu' use of class template requires template argument list' To powinienem zaznaczyć że jest to template oraz w odpowiednim miejscu skonkretyzować typ? |
|
Monika90 |
» 2014-09-28 21:41:16 Pewnie i się kompiluje, ale nie da się zlinkować, bo nie masz definicji tego operatora friend ostream & operator <<( ostream & wyjscie, const konto & wyj );
|
|
ubidragon Temat założony przez niniejszego użytkownika |
» 2014-09-29 13:45:47 A gdyby w klasie dać taką deklarację operatora friend ostream & operator <<( ostream & wyjscie, const konto < typ > & wyj );
to teraz chyba już jest poprawnie Pojawia się jeszcze jeden dość poważny problem z używaniem funkcji dodaj. Stworzyłem sobie przykładowe konto i operacje, chciałem użyć funkcji dodaj, żeby zobaczyć czy działa poprawnie i dodaje operacje do konta. konto < int > test(); dochod < int > op1( "opis", 100 ); test.dodaj( op1 );
Jednak otrzymuje błąd rror C2228: left of '.dodaj' must have class/struct/union Próbowałem dostać się także do funkcji dodaj za pomocą operatorów -> i :: ale żaden nie chce działać. |
|
maly |
» 2014-09-29 15:56:40 Gupi kompilator myśli że konto < int > test(); jest deklaracją funkcji. Tak powinno działać konto < int > test; . |
|
pekfos |
» 2014-09-29 15:57:59 |
|
akwes |
» 2014-09-29 15:59:14 @mały, wcale nie głupi :)
|
|
maly |
» 2014-09-29 16:05:34 @up No może i nie głupi ale całkowicie pozbawiony decentracji a o empati nie wspomnę. ;) |
|
1 « 2 » 3 |