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.
Annonceindlæg fra DE-CIX
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.
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
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?
22. oktober 2006 - 19:41
#4
s er en pointer, << virker med objekter og referencer. Så: *s << send_buf;
22. oktober 2006 - 19:47
#5
Tak for det bertlebrander nu virker det. Hvordan kan jeg give jer begge (karas og bertelbrander) svar?
22. oktober 2006 - 19:47
#6
svar = point
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.
22. oktober 2006 - 20:18
#8
Selv den bedste begår fejl :) Smid et svar karas.
23. oktober 2006 - 13:02
#9
.
Kurser inden for grundlæggende programmering