Operator<< – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Operator<< – C / C++ – Fórum – Programujte.comOperator<< – C / C++ – Fórum – Programujte.com

 

Gadael0
Návštěvník
1. 12. 2007   #1
-
0
-

Zdravim!

mam nasledujici kod:



template <class Type>
class Vector
{
Type * buffer;
int size, capacity;
....
public:
Vector();
....
friend ostream& operator<<(ostream&, Vector&);
....
int length() const;
};

....
....
template <class Type>
ostream & operator<<(ostream& o, Vector<Type>& v)
{
o << "(";
for (int i = 0; i < v.length(); i++)
{
o << v[i];
if (i < v.length() - 1)
o << ", ";
}
o << ")"<< endl;
return o;
}
....
....

int main(int argc, char *argv[])
{
Vector<int> a;
cout << a;
}


Bez problemu to zkompiluju bez toho posledniho radku - cout << a. Jakmile ho tam ale pridam, vyhodi to nejaky fatal error (pripadne ho sem napisu). Nevim si s tim rady.
Diky za odpovedi

Nahlásit jako SPAM
IP: 193.165.2.–
Nejhorsi, co se Vam v zivote muze prihodit je, ze narazite na blbce...
Gadael0
Návštěvník
1. 12. 2007   #2
-
0
-

jo, sorry, koukam ze nadpis tematu ve foru nezvlada znaky << ;-)

Nahlásit jako SPAM
IP: 193.165.2.–
Nejhorsi, co se Vam v zivote muze prihodit je, ze narazite na blbce...
janc10
Návštěvník
1. 12. 2007   #3
-
0
-

ak sa nemylim tak musis definovat presne ktory prvok vectoru chces vypisat
napr.



...
cout << a[5];
...

Nahlásit jako SPAM
IP: 84.47.53.–
Gadael0
Návštěvník
1. 12. 2007   #4
-
0
-

To janc1 : ale prave proto tam mam pretizeny ten operator <<, ktery mi podle moji definice vypise cely vektor ve tvaru (a1, a2,...,an).

Nahlásit jako SPAM
IP: 193.165.2.–
Nejhorsi, co se Vam v zivote muze prihodit je, ze narazite na blbce...
sn3d0
Věrný člen
1. 12. 2007   #5
-
0
-

implementaciu tvojho operatora sa snaz davat do vnutra tvojeho Vector template.Usetri ti to prave taketo problemy.Kod by teda vyzeral nasledovne plus nemusis tam davat nejake sialene zapisi.



template <class Type>
class Vector
{
public:
...
friend ostream& operator<<(ostream& o, Vector& v) {
//Tu das ten kod operatora:
...
return o;
}
}

int main(int argc, char *argv[])
{
Vector<int> a;
cout << a;

return 0;
}


Generika a sablony patria k tym advanced veciam a pre zaciatocnika ale aj pre skuseneho je niekedy zapis sablon dost chaoticky. Pri templates je dobre vsetko vnarat do sablony, aspon mne sa to osobne osvedcilo. V inom pripade by to vyzeralo nasledovne:



template <class Type>
class Vector
{
public:
...
template<class U> friend ostream & operator<< (ostream& o, Vector<U>& v);
};


template <class U>
ostream & operator<<(ostream& o, Vector<U>& v)
{
//Tvoj kod
return o;
}

int main(int argc, char *argv[])
{
Vector<int> a;
cout << a;

return 0;
}


Nahlásit jako SPAM
IP: 89.173.30.–
shutdown -h now
Gadael0
Návštěvník
1. 12. 2007   #6
-
0
-

To sn3d : parada, dik moc, uz to jede... ale stejne jsem nepochopil, v cem byla tedy chyba. Nevadi, budu tedy vsechno definovat hned v sablone.

Nahlásit jako SPAM
IP: 193.165.2.–
Nejhorsi, co se Vam v zivote muze prihodit je, ze narazite na blbce...
sn3d0
Věrný člen
1. 12. 2007   #7
-
0
-

doplnil som svoj predchadzajuci prispevok o tvoj poopraveny kod ktory bude fungovat. Snad ti s tohto bude jasnejsie kde bola chyba. Totizto som si uvedomil ze ked budes chciet pouzit pri operatoroch specializaciu, tak aj tak budes musiet operator vytiahnut von z Vector sablony.

Nahlásit jako SPAM
IP: 89.173.30.–
shutdown -h now
Gadael0
Návštěvník
1. 12. 2007   #8
-
0
-

uz chapu. A jeste jeden dotaz k sablonam - vezmu stejny kus kodu jako nahore a ted bych potreboval, aby sablona mela jeste druhy, ale nepovinny parametr (kdyz by chybel, tak by se pouzila defaultni hodnota), takze asi takhle:



template <class Type, int N>
class Vector
{
...
};

int main(int argc, char *argv[])
{
Vector<int> a; // tady se pouzije defaultni jednicka treba
....
Vector<int,2> b;
....
return 0;
}


Musim na to delat dve ruzne sablony, nebo to jde nejak skloubit?
Diky

Nahlásit jako SPAM
IP: 193.165.2.–
Nejhorsi, co se Vam v zivote muze prihodit je, ze narazite na blbce...
Gadael0
Návštěvník
1. 12. 2007   #9
-
0
-

jo dobry uz to asi vim:



template <class Type, int N=1>


Nahlásit jako SPAM
IP: 193.165.2.–
Nejhorsi, co se Vam v zivote muze prihodit je, ze narazite na blbce...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 27 hostů

Podobná vlákna

Operátor -> — založil Adam

Operator - — založil yaqwsx

Operátor &lt;&lt; — založil RePRO

Ternary operator — založil robin

Modulo operátor... — založil Anonymní uživatel

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý