Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szablony klas - błąd przy tworzeniu obiektu (template argument list)

Ostatnio zmodyfikowano 2014-09-29 20:50
Autor Wiadomość
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.
P-117736
ubidragon
Temat założony przez niniejszego użytkownika
» 2014-09-28 21:31:43
Chyba już załapałem

C/C++
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?
P-117737
Monika90
» 2014-09-28 21:41:16
Pewnie i się kompiluje, ale nie da się zlinkować, bo nie masz definicji tego operatora
C/C++
friend ostream & operator <<( ostream & wyjscie, const konto & wyj );
P-117738
ubidragon
Temat założony przez niniejszego użytkownika
» 2014-09-29 13:45:47
A gdyby w klasie dać taką deklarację operatora

C/C++
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.

C/C++
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ć.
P-117747
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;
.
P-117751
pekfos
» 2014-09-29 15:57:59
C/C++
konto < int > test;

P-117752
akwes
» 2014-09-29 15:59:14
@mały,
wcale nie głupi :)

P-117753
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ę. ;)
P-117754
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona