Avatar billede evilfish Nybegynder
29. september 2007 - 14:34 Der er 16 kommentarer og
1 løsning

Operator ostream overloading

Hej eksperter

Jeg har en template klasse hvor jeg er ved a overloade << operatoren. Men jeg er støt ind i nogle problemer. Jeg får disse fejl meddelseser:

error C2589: '&' : illegal token on right side of '::'   
error C2988: unrecognizable template declaration/definition   
error C2059: syntax error : '::'

Kode:
template <class T>
ostream GenericArray<T>:: &operator<<( ostream &str, const GenericArray<T> &rhs )
{
    for(int i = 0; i < used; i++)
    {
        os << "[" << i << "] - " << rhs.getItem[i] << "\n";
    }
    os << endl;
    return os;
}


public:
friend ostream &operator<<( ostream &str, const GenericArray<T> &rhs );
Avatar billede evilfish Nybegynder
29. september 2007 - 15:30 #1
Jeg fik fjernet de 3 fejl ved at skrive dette i stedet for:

ostream GenericArray<T>::operator<<(ostream &os, const GenericArray<T> &rhs)

Men nu har jeg denne fejl:

error C2039: '<<' : is not a member of 'GenericArray<T>'

Hvad kan nu være galt?
Avatar billede arne_v Ekspert
29. september 2007 - 17:09 #2
Jeg plejer at lave det som:

ostream& operator<<(ostream &os, const GenericArray<T> &rhs)
Avatar billede arne_v Ekspert
29. september 2007 - 17:09 #3
Det er jo netop ikke en member når du erklærer den som friend.
Avatar billede evilfish Nybegynder
29. september 2007 - 17:15 #4
Det startede jeg også ud med. Men så får jeg følgende fejl:

error C2804: binary 'operator <<' has too many parameters
Avatar billede arne_v Ekspert
29. september 2007 - 20:26 #5
Efter at have googlet lidt kom jeg op med følgende:

#include <iostream>

using namespace std;

template <class T>
class GenericArray
{
    public:
        template <class U> friend ostream &operator<<( ostream &str, const GenericArray<U> &rhs );
};

template <class T>
ostream &operator<<( ostream &str, const GenericArray<T> &rhs )
{
    str << "bøh";
    return str;
}

int main()
{
    GenericArray<int> a;
    cout << a << endl;
    return 0;
}
Avatar billede evilfish Nybegynder
30. september 2007 - 14:33 #6
hehe - Har selv googlet, og faktisk selv kommet frem til hvad du har :). Dog følgende fejl er dukket op:

error C2662: 'GenericArray<T>::getSize' : cannot convert 'this' pointer from 'const GenericArray<T>' to 'GenericArray<T> &'
error C2662: 'GenericArray<T>::getItem' : cannot convert 'this' pointer from 'const GenericArray<T>' to 'GenericArray<T> &'

Nogen ide om hvad der er galt her?
Avatar billede arne_v Ekspert
30. september 2007 - 15:44 #7
Mit gæt er at du skal have en const sat ind.

Hvis du viser koden, så kan vi muligvis sige hvor.
Avatar billede evilfish Nybegynder
30. september 2007 - 16:02 #8
template <class T>
T GenericArray<T>::getItem(int pos)
{
    return gArray[pos];
}


template <class T>
int GenericArray<T>::getSize()
{
    return used;
}

public:
        T getItem(int pos);
        int getSize();
Avatar billede arne_v Ekspert
30. september 2007 - 16:07 #9
Jeg kan ikke genskabe fejlen.

Hvilken compiler bruger du ?
Avatar billede evilfish Nybegynder
30. september 2007 - 16:07 #10
VS studio pro 2005
Avatar billede evilfish Nybegynder
30. september 2007 - 16:08 #11
template <class T>
std::ostream operator<<(std::ostream &os, const GenericArray<T> &rhs)
{
    for(int i = 0; i < rhs.getSize(); i++)
    {       
        os << "[" << i << "] - " << rhs.getItem(i) << "\n";
    }   
    os << std::endl;
    return os;
}
Overload koden til <<
Avatar billede arne_v Ekspert
30. september 2007 - 16:19 #12
Ah - sådan !

Prøv:

public:
        T getItem(int pos) const;
        int getSize() const;
Avatar billede evilfish Nybegynder
30. september 2007 - 16:32 #13
Okay jeg ved ikke hvad jeg gør, men fejl forfølger mig!

const virkede når den blev sat i både deklerationen og i implmentationen. Så de fejl er væk. NU er denne her poppet op:

error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'

Jeg vil tro det er når jeg deklerere alle metoder. Jeg har lagt filen op her:

http://www.evilfish.dk/other/evilfish.txt
Avatar billede arne_v Ekspert
30. september 2007 - 16:37 #14
std::ostream  operator<<

->

std::ostream&  operator<<
Avatar billede arne_v Ekspert
30. september 2007 - 16:38 #15
(der var også nogle andre fejl, som jeg ikke forstår at fu kunne få gennem compileren)
Avatar billede evilfish Nybegynder
30. september 2007 - 16:40 #16
Åhh jeg kan gøre meget som newbie, som ikke engang en computer kan finde ud af.

Men nice tak. Det virker nu. Dig evigt taknemmelig.

Svar og få nogle veltjente point.
Avatar billede arne_v Ekspert
30. september 2007 - 16:48 #17
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester