Avatar billede oddi Nybegynder
21. oktober 2006 - 22:25 Der er 8 kommentarer og
1 løsning

operator overloading

Hej Experter

Jeg har et problem med at lave operator overloading.

jeg har lavet en funktion:

const OV_socket& OV_tcp::operator << ( const std::string& s ) const
{   
    if(OV_write_n(socket_id, s, s.size()) < 0)
        exit(0);
    return(*this);
}

Det er menningen at man skal kunne lave et objekt, og bruge dette objekt til at skrive og læse fra en socket.

f.eks: objekt << data;

Når jeg kompilerer får jeg følgende fejl:

OV_tcp.cpp: In member function ‘virtual const OV_socket& OV_tcp::operator<<(const std::string&) const’:
OV_tcp.cpp:127: error: passing ‘const OV_tcp’ as ‘this’ argument of ‘virtual ssize_t OV_tcp::OV_write_n(int, std::string, size_t)’ discards qualifiers
make: *** [OV_tcp.o] Error 1


Jeg håber at i kan finde fejlen

På forhånd tak Oddi.
Avatar billede bertelbrander Novice
22. oktober 2006 - 01:41 #1
s, som argument til din operator er const. OV_write_n forventer en ikke const string.
Hvis ikke OV_write_n har brug for at ændre strengen så lav argumentet til OV_write_n om til en const (det burde den ikke).
Ellers lav s om til en ikke const.
Avatar billede karas Nybegynder
22. oktober 2006 - 14:15 #2
OV_write_n bruger pass-by-value så det er uden betydning om 's' er const eller ej.

Problemet er at OV_write_n ikke er defineret som en const function og det er din operator overloaded funktion.

Ps. Du kan med fordel bruge pass-by-reference i OV_write_n
Avatar billede oddi Nybegynder
22. oktober 2006 - 17:55 #3
Det er rigtigt hvad karas siger jeg havde glemt en const :S

Men nu får jeg et problem når jeg tester operator<<

jeg laver et objekt: OV_socket *s = new OV_tcp(9000);
og:
s << send_buf;

Så får jeg fejlen:
main1.cpp:34: error: no match for ‘operator<<’ in ‘s << send_buf’

Hvad gør jeg forkert?
Avatar billede bertelbrander Novice
22. oktober 2006 - 19:41 #4
s er en pointer, << virker med objekter og referencer.

Så:
*s << send_buf;
Avatar billede oddi Nybegynder
22. oktober 2006 - 19:47 #5
Tak for det bertlebrander nu virker det.

Hvordan kan jeg give jer begge (karas og bertelbrander) svar?
Avatar billede oddi Nybegynder
22. oktober 2006 - 19:47 #6
svar = point
Avatar billede bertelbrander Novice
22. oktober 2006 - 19:55 #7
Point må gå til karas.
Jeg samler ikke på point og det er lidt for pinligt at jeg ikke spottede den rigtige fejl.
Avatar billede oddi Nybegynder
22. oktober 2006 - 20:18 #8
Selv den bedste begår fejl :)

Smid et svar karas.
Avatar billede karas Nybegynder
23. oktober 2006 - 13:02 #9
.
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