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 Novataris
Vejen til devops med Bavarian Nordic
Bavarian Nordics vækst blev starten på et DevOps-samarbejde med Novataris for hurtigt at kunne tilpasse IT-organisation til forretningen.
7. december 2023
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?